Ë
    ÚÍ: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j8                   e«       «       yy)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 ]  }|j                  t	        |«      «       Œ |S t        | d«      r&|j                  t	        | j                  «      «       |S |j                  | «       |S )NÚenum)Ú
isinstanceÚtupleÚlistÚextendÚ_flatten_groupÚhasattrr   Úappend)ÚgroupÚretÚitems      úp/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/fontTools/voltLib/voltToFea.pyr   r   =   sw   € Ø
€CÜ�%œ%¤˜Ô'Øò 	-ˆDØ�J‰J”~ dÓ+Õ,ð	-ð €Jô	 
�˜Ô	Ø�
‰
”> %§*¡*Ó-Ô.ð €Jð 	�
‰
�5ÔØ€Jó    c                 óº  — | D �ci c]  }|j                   j                  «       |“Œ }}| D ��ci c]f  }|j                   j                  «       t        |«      D �cg c]6  }t        |t        j
                  «      r|j                  j                  «       ‘Œ8 c}“Œh }}}t        |«      }|j                  «       D �cg c]  }||   ‘Œ	 c}S c c}w c c}w c c}}w c c}w ©N)	ÚnameÚlowerr   r   ÚVAstÚ	GroupNamer   r   Ústatic_order)Úgroupsr   Ú	group_mapÚxÚgraphÚsorterr   s          r   Úsort_groupsr&   L   sÌ   € Ø8>Ö?¨u�—‘×!Ñ!Ó# UÑ*Ð?€IÐ?ð ÷ð ð 	�
‰
×ÑÓä# EÓ*ö
àÜ˜!œTŸ^™^Ô,ð �G‰G�M‰M�Oò
ñ 	
ð€Eñ ô ˜uÓ%€FØ(.×(;Ñ(;Ó(=Ö> ˆI�d‹OÒ>Ð>ùò @ùò
ùóùò ?s"   …"C®+CÁ;CÂCÂ9CÃCc                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )ÚLookupc                 ó6   •— t         ‰| �  |||«       g | _        y r   )ÚsuperÚ__init__Úchained)Úselfr   Úuse_extensionÚlocationÚ	__class__s       €r   r+   zLookup.__init__[   s   ø€ Ü‰Ñ˜˜}¨hÔ7Øˆ�r   )FN)Ú__name__Ú
__module__Ú__qualname__r+   Ú__classcell__)r0   s   @r   r(   r(   Z   s   ø„ ÷ñ r   r(   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y)Ú	VoltToFeaz[^A-Za-z_0-9.]z[^A-Za-z_0-9.\-]Nc                 óJ  — t        |t        j                  «      r|d c| _        | _        nd |c| _        | _        || _        i | _        d | _        i | _        i | _	        i | _
        i | _        t        «       | _        i | _        i | _        i | _        i | _        i | _        i | _        y r   )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)r-   Úfile_or_pathÚfonts      r   r+   zVoltToFea.__init__d   s›   € Ü�l¤D§M¡MÔ2Ø,8¸$Ð)ˆDŒI�tÕ)à,0°,Ð)ˆDŒI�tÔ)ØˆŒ
àˆŒØ ˆÔàˆŒ
ØˆÔØˆŒØˆŒä“eˆŒØˆŒàˆÔØˆŒàˆŒàˆÔØˆÕr   c                 ó  — || j                   vri| j                  j                  d|«      }|| j                   j                  «       v r"|dz  }|| j                   j                  «       v rŒ"|| j                   |<   | j                   |   S ©NÚ_)rH   Ú_NOT_LOOKUP_NAME_REÚsubÚvalues©r-   r   Úress      r   Ú_lookupNamezVoltToFea._lookupName~   s‚   € Ø�t×)Ñ)Ñ)Ø×*Ñ*×.Ñ.¨s°DÓ9ˆCØ˜×+Ñ+×2Ñ2Ó4Ñ4Ø�s‘
�ð ˜×+Ñ+×2Ñ2Ó4Ò4à'*ˆD×Ñ˜tÑ$Ø×!Ñ! $Ñ'Ð'r   c                 ó  — || j                   vri| j                  j                  d|«      }|| j                   j                  «       v r"|dz  }|| j                   j                  «       v rŒ"|| j                   |<   | j                   |   S rM   )rI   Ú_NOT_CLASS_NAME_RErP   rQ   rR   s      r   Ú
_classNamezVoltToFea._className†   s‚   € Ø�t×(Ñ(Ñ(Ø×)Ñ)×-Ñ-¨c°4Ó8ˆCØ˜×*Ñ*×1Ñ1Ó3Ñ3Ø�s‘
�ð ˜×*Ñ*×1Ñ1Ó3Ò3à&)ˆD×Ñ˜dÑ#Ø× Ñ  Ñ&Ð&r   c                 óÆ  — |j                   D ].  }t        |t        j                  «      sŒ| j	                  |«       Œ0 |j                   D �cg c]  }t        |t        j
                  «      sŒ|‘Œ! }}t        |«      D ]  }| j                  |«       Œ |j                   D ]Ü  }t        |t        j                  «      rd|v sŒ"| j                  |«       Œ4t        |t        j                  «      r| j                  ||«       Œat        |t        j                  t        j
                  f«      rŒŒt        |t        j                  «      r| j                  |«       Œ¸t        |t        j                  «      rŒÓt        |«      ‚ |j                   D ]P  }t        |t        j                  «      sŒ|j                   rd|vrŒ/|j"                  rd|vrŒ@| j%                  |«       ŒR y c c}w )Nr   r
   )Ú
statementsr   r   ÚGlyphDefinitionÚ_glyphDefinitionÚGroupDefinitionr&   Ú_groupDefinitionÚAnchorDefinitionÚ_anchorDefinitionÚSettingDefinitionÚ_settingDefinitionÚScriptDefinitionÚ_scriptDefinitionÚLookupDefinitionÚNotImplementedErrorÚposrP   Ú_lookupDefinition)r-   ÚdocÚtablesÚignore_unsupported_settingsÚ	statementÚsr!   r   s           r   Ú_collectStatementszVoltToFea._collectStatementsŽ   s‹  € àŸ™ò 	1ˆIÜ˜)¤T×%9Ñ%9Õ:Ø×%Ñ% iÕ0ð	1ð !Ÿ^™^ÖS˜¬z¸!¼T×=QÑ=QÕ/R’!ÐSˆÐSÜ  Ó(ò 	)ˆEØ×!Ñ! %Õ(ð	)ð Ÿ™ò 	5ˆIÜ˜)¤T×%:Ñ%:Ô;Ø˜VÒ#Ø×*Ñ*¨9Õ5Ü˜I¤t×'=Ñ'=Ô>Ø×'Ñ'¨	Ð3NÕOÜ˜I¬×(<Ñ(<¼d×>RÑ>RÐ'SÔTØÜ˜I¤t×'<Ñ'<Ô=Ø×&Ñ& yÕ1Ü 	¬4×+@Ñ+@ÕAÜ)¨)Ó4Ð4ð	5ð Ÿ™ò 	2ˆIÜ˜)¤T×%:Ñ%:Õ;Ø—=’= V°6Ñ%9ØØ—=’= V°6Ñ%9ØØ×&Ñ& yÕ1ñ	2ùò' Ts   ÁGÁ,Gc           
      ó8
  — t        j                  «       }|j                  }| j                  rM|j	                  t        j
                  d«      «       |j                  | j                  j                  «       «       | j                  r]|j	                  t        j
                  d«      «       |j                  d„ t        | j                  j                  «       «      D «       «       | j                  ro|j	                  t        j
                  d«      «       | j                  j                  «       D ].  }|j                  |j                  «       |j	                  |«       Œ0 | j                  j                  «       }|D ]¡  }||   }|D ]k  }||   }	|	D ]5  }
|	|
   D �cg c]!  }|j                  «       | j                  v sŒ |‘Œ# c}|	|
<   Œ7 |	j                  «       D ��ci c]  \  }}|sŒ	||“Œ c}}||<   Œm |j                  «       D ��ci c]  \  }}|sŒ	||“Œ c}}||<   Œ£ |j                  «       D ��ci c]  \  }}|sŒ	||“Œ }}}|�rÇ|j	                  t        j
                  d«      «       |j                  «       D �]�  \  }}t        j                   |«      }t        |d„ ¬«      }|dk(  r(t#        |«      d	kD  rt$        j'                  d
«       |d d	 }|D �]"  }|dk7  r.|j                  j	                  t        j(                  |«      «       t        ||   d„ ¬«      }|dk(  r(t#        |«      d	kD  rt$        j'                  d«       |d d	 }|D ]©  }
|dk7  rH|
dk(  rdnd}|j                  j	                  t        j*                  |
j-                  d«      |¬«      «       ||   |
   D ]O  }| j                  |j                  «          }t        j.                  |«      }|j                  j	                  |«       ŒQ Œ« �Œ% |j	                  |«       �Œ’ | j0                  réd|v råg }dD ]�  }|| j0                  v rld|j                  «       z   }t        j2                  || j0                  |   «      }|j	                  |«       |j	                  t        j4                  |«      «       Œ}|j	                  d «       Œ� t        j6                  d«      }|j                  j	                  t        j8                  |Ž «       |j	                  |«       |S c c}w c c}}w c c}}w c c}}w )Nz# Glyph classesz
# Mark classesc              3   ó&   K  — | ]	  }|d    –— Œ y­w©é   N© )Ú.0Úcs     r   ú	<genexpr>z.VoltToFea._buildFeatureFile.<locals>.<genexpr>¼   s   è ø€ ÒN q˜a �dÑNùs   ‚z

# Lookupsz
# Featuresc                 ó   — | dk(  rdS dS )NÚDFLTr   rq   rr   ©Úks    r   ú<lambda>z-VoltToFea._buildFeatureFile.<locals>.<lambda>Ö   s   € ÀÀfÂ¸A€ ÐRS€ r   )ÚkeyÚaaltrq   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S dS )NÚdfltr   rq   rr   rx   s    r   rz   z-VoltToFea._buildFeatureFile.<locals>.<lambda>â   s   € ¨1°ª; 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   ÚFeatureFilerY   r?   r   ÚCommentr   rQ   rE   ÚsortedÚitemsrA   r,   r@   Úcopyr   ÚFeatureBlockÚlenÚlogÚwarningÚScriptStatementÚLanguageStatementÚljustÚLookupReferenceStatementr>   ÚGlyphClassDefinitionÚGlyphClassNameÚ
TableBlockÚGlyphClassDefStatement)r-   ri   rh   rY   ÚlookupÚfeaturesÚfeature_tagÚscriptsÚ
script_tagÚlangsÚlanguage_tagÚlÚtrl   ÚfÚfeatureÚscript_tagsÚlanguage_tagsr€   r   Ú	lookuprefÚclassesÚ	classnameÚ
glyphclassÚgdefs                            r   Ú_buildFeatureFilezVoltToFea._buildFeatureFile²   sž  € Ü�o‰oÓˆØ—^‘^ˆ
à×ÒØ×ÑœcŸk™kÐ*;Ó<Ô=Ø×Ñ˜d×0Ñ0×7Ñ7Ó9Ô:à×ÒØ×ÑœcŸk™kÐ*<Ó=Ô>Ø×ÑÑN¬F°4×3DÑ3D×3JÑ3JÓ3LÓ,MÔNÔNà�=Š=Ø×ÑœcŸk™k¨-Ó8Ô9ØŸ-™-×.Ñ.Ó0ò *�Ø×!Ñ! &§.¡.Ô1Ø×!Ñ! &Õ)ð*ð
 —>‘>×&Ñ&Ó(ˆØ#ò 		LˆKØ˜{Ñ+ˆGØ%ò L�
Ø 
Ñ+�Ø$)ò �Là#(¨Ñ#6ö+Ø¸!¿'¹'»)ÀtÇ}Á}Ò:Tšò+�E˜,Ò'ðð 9>¿¹»×&K±°°1Ê q¨!¡tÓ&K�˜
Ò#ðLð 7>·m±m³o×$K©d¨a°Ê Q¨¡TÓ$KˆH�[Ò!ð		Lð &.§^¡^Ó%5×;™T˜Q º�A�q‘DÐ;ˆÑ;âØ×ÑœcŸk™k¨,Ó7Ô8Ø(0¯©Ó(8ó #+Ñ$�˜WÜ×*Ñ*¨;Ó7�Ü$ WÑ2SÔT�Ø &Ò(¬S°Ó-=ÀÒ-AÜ—K‘KðRôð #.¨b¨q /�KØ"-ó A�JØ" fÒ,Ø×*Ñ*×1Ñ1´#×2EÑ2EÀjÓ2QÔRÜ$*Ø 
Ñ+Ù=ô%�Mð # fÒ,´°]Ó1CÀaÒ1GÜŸ™ðXôð )6°b°qÐ(9˜Ø(5ò A˜Ø&¨&Ò0Ø6BÀfÒ6L©dÐRW˜OØ#×.Ñ.×5Ñ5Ü #× 5Ñ 5Ø$0×$6Ñ$6°qÓ$9Ø4Cô!"ôð %,¨JÑ$7¸Ñ$Eò A˜DØ%)§]¡]°4·:±:³<Ñ%@˜FÜ(+×(DÑ(DÀVÓ(L˜IØ#×.Ñ.×5Ñ5°iÕ@ñAòAðAð4 ×!Ñ! 'Ö*ðG#+ðJ �:Š:˜& FÑ*ØˆGØAò )�Ø˜4Ÿ:™:Ñ%Ø '¨$¯*©*«,Ñ 6�IÜ!$×!9Ñ!9¸)ÀTÇZÁZÐPTÑEUÓ!V�JØ×%Ñ% jÔ1Ø—N‘N¤3×#5Ñ#5°jÓ#AÕBà—N‘N 4Õ(ð)ô —>‘> &Ó)ˆDØ�O‰O×"Ñ"¤3×#=Ñ#=¸wÐ#GÔHØ×Ñ˜dÔ#àˆ
ùò{+ùó 'LùÛ$KùÛ;s0   Æ!T
Æ:T
Ç
T

Ç$T

È
TÈTÈ1
TÈ<Tc                 óP  — | j                   €(t        | j                  «      j                  «       | _         | j                   }|€t        }| j
                  �| j
                  j                  «       | _        | j                  |||«       | j                  |«      }|j                  «       S r   )r9   Ú
VoltParserr:   ÚparseÚTABLESr;   ÚgetGlyphOrderr=   rm   rª   ÚasFea)r-   ri   rj   rh   Úfeas        r   ÚconvertzVoltToFea.convert
  sˆ   € Ø�9‰9ÐÜ" 4×#5Ñ#5Ó6×<Ñ<Ó>ˆDŒIØ�i‰iˆàˆ>ÜˆFØ�:‰:Ð!Ø $§
¡
× 8Ñ 8Ó :ˆDÔà×Ñ  VÐ-HÔIØ×$Ñ$ VÓ,ˆØ�y‰y‹{Ðr   c                 óœ   — 	 |j                   }t        j                  | j                  j                  ||«      «      S # t        $ r |}Y Œ<w xY wr   )ÚglyphÚAttributeErrorr   Ú	GlyphNamer<   Úget)r-   r´   r   s      r   Ú
_glyphNamezVoltToFea._glyphName  sH   € ð	Ø—;‘;ˆDô �}‰}˜TŸ_™_×0Ñ0°°tÓ<Ó=Ð=øô ò 	ØŠDð	ús   ‚= ½AÁ
Ac                 óž   — 	 |j                   }t        j                  | j                  |j                  «          «      S # t        $ r |}Y Œ=w xY wr   )r   rµ   r   r•   r?   r   )r-   r   r   s      r   Ú
_groupNamezVoltToFea._groupName  sJ   € ð	Ø—;‘;ˆDô ×!Ñ! $×"4Ñ"4°T·Z±Z³\Ñ"BÓCÐCøô ò 	ØŠDð	ús   ‚> ¾AÁAc                 óª   — |j                  «       D �cg c]5  }t        |t        t        j                  f«      r| j                  |«      n|‘Œ7 c}S c c}w r   )ÚglyphSetr   Ústrr   r¶   r¸   )r-   r   r#   s      r   Ú	_glyphSetzVoltToFea._glyphSet&  sJ   € ð —]‘]“_ö
àô $.¨a´#´t·~±~Ð1FÔ#GˆT�_‰_˜QÔÈQÑNò
ð 	
ùò 
s   “:Ac                 óÆ  — g }|D �]X  }t        |t        j                  «      r!|j                  | j	                  |«      «       Œ?t        |t        j
                  «      r!|j                  | j                  |«      «       Œzt        |t        j                  «      rV| j                  |j                  d¬«      }|r|j                  |«       ŒÅ|j                  t        j                  |«      «       Œêt        |t        j                  «      rL| j                  |«      }|r|j                  |«       �Œ*|j                  t        j                  |«      «       �ŒPt        |«      ‚ |S ©NT©Úflatten)r   r   r¶   r   r¸   r   rº   ÚEnumÚ	_coverager   r   r   Ú
GlyphClassÚRanger¾   re   )r-   ÚcoveragerÂ   rŠ   r   s        r   rÄ   zVoltToFea._coverage,  sö   € ØˆØó 	0ˆDÜ˜$¤§¡Ô/Ø—‘˜TŸ_™_¨TÓ2Õ3Ü˜D¤$§.¡.Ô1Ø—‘˜TŸ_™_¨TÓ2Õ3Ü˜D¤$§)¡)Ô,Ø—~‘~ d§i¡i¸�~Ó>�ÙØ—L‘L Õ&à—L‘L¤§¡°Ó!5Õ6Ü˜D¤$§*¡*Ô-Ø—~‘~ dÓ+�ÙØ—L‘L Ö&à—L‘L¤§¡°Ó!5Ö6ä)¨$Ó/Ð/ð%	0ð& ˆr   c                 ó²   — g }|D ]O  }| j                  |d¬«      }t        |«      dkD  rt        j                  |«      }n|d   }|j	                  |«       ŒQ |S )NTrÁ   rq   r   )rÄ   r�   r   rÅ   r   )r-   ÚcontextÚoutr   rÇ   s        r   Ú_contextzVoltToFea._contextC  s^   € ØˆØò 	!ˆDØ—~‘~ d°D�~Ó9ˆHÜ�8‹}˜qÒ ÜŸ>™>¨(Ó3‘à# A™;�Ø�J‰J�xÕ ð	!ð ˆ
r   c                 ó,  — | j                  |j                  «      }| j                  |j                  j                  d¬«      }t	        j
                  |«      }t	        j                  ||«      }|| j                  |j                  j                  «       <   y rÀ   )	rW   r   rÄ   r   r   rÅ   r”   r?   r   )r-   r   r   Úglyphsr¨   Úclassdefs         r   r]   zVoltToFea._groupDefinitionN  sk   € Ø�‰˜uŸz™zÓ*ˆØ—‘ §
¡
§¡¸�Ó>ˆÜ—^‘^ FÓ+ˆ
Ü×+Ñ+¨D°*Ó=ˆØ19ˆ×Ñ˜5Ÿ:™:×+Ñ+Ó-Ò.r   c                 óŽ  — 	 | j                   |j                     | j                  |j                  <   |j
                  dv rŽ|j
                  | j                  vr+t        j                  «       | j                  |j
                  <   | j                  |j
                     j                  j                  | j                  |j                  «      «       |j
                  dk(  r&| j                  j                  |j                  «       y |j
                  dk(  r$|j                  | j                  |j                  <   y y # t        $ r Y �Œw xY w)Nr�   rƒ   r„   )r=   Úidr<   r   Ú	TypeErrorÚtyper>   r   rÅ   rÍ   r   r¸   rC   ÚaddÚ
componentsrD   )r-   r´   s     r   r[   zVoltToFea._glyphDefinitionU  së   € ð	Ø*.×*;Ñ*;¸E¿H¹HÑ*EˆD�O‰O˜EŸJ™JÑ'ð �:‰:ÐBÑBØ�z‰z §¡Ñ+Ü),¯©Ó)9�—
‘
˜5Ÿ:™:Ñ&Ø�J‰J�u—z‘zÑ"×)Ñ)×0Ñ0°·±ÀÇÁÓ1LÔMà�:‰:˜ÒØ�K‰K�O‰O˜EŸJ™JÕ'Ø�Z‰Z˜:Ò%Ø*/×*:Ñ*:ˆD�O‰O˜EŸJ™JÒ'ð &øô ò 	Úð	ús   ‚0D7 Ä7	EÅEc                 óä  — |j                   }|j                  D ]Ð  }|j                   }|j                  D ]³  }|j                  D �ci c]  }|j	                  d«      d   d“Œ }}|j                   }|| j
                  vri | j
                  |<   || j
                  |   vri | j
                  |   |<   || j
                  |   |   vsJ ‚|j                  «       | j
                  |   |   |<   Œµ ŒÒ y c c}w )Nú\r   T)Útagr�   r™   ÚlookupsÚsplitr@   Úkeys)	r-   ÚscriptÚstagÚlangÚltagr¢   rŸ   rØ   Úftags	            r   rc   zVoltToFea._scriptDefinitione  sî   € Ø�z‰zˆØ—L‘Lò 
	BˆDØ—8‘8ˆDØŸ=™=ò B�Ø;B¿?¹?ÖK°a˜1Ÿ7™7 4›=¨Ñ+¨TÑ1ÐK�ÐKØ—{‘{�Ø˜tŸ~™~Ñ-Ø+-�D—N‘N 4Ñ(Ø˜tŸ~™~¨dÑ3Ñ3Ø13�D—N‘N 4Ñ(¨Ñ.Ø 4§>¡>°$Ñ#7¸Ñ#=Ñ=Ð=Ð=Ø3:·<±<³>�—‘˜tÑ$ TÑ*¨4Ò0ñBñ
	Bùò Ls   ÁC-c                 óÌ   — |j                   j                  d«      r$|j                  | j                  |j                   <   y |s#t        j                  d|j                   › �«       y y )NÚ	COMPILER_zUnsupported setting ignored: )r   Ú
startswithÚvaluerG   rŽ   r�   )r-   ÚsettingÚignore_unsupporteds      r   ra   zVoltToFea._settingDefinitions  sJ   € Ø�<‰<×"Ñ" ;Ô/Ø+2¯=©=ˆD�N‰N˜7Ÿ<™<Ò(Ù#Ü�K‰KÐ7¸¿¹°~ÐFÕGð $r   c                 óÚ   — |\  }}}}}}|xr |j                  «       xs d }|xr |j                  «       xs d }	|xr |j                  «       xs 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._adjustmenty  s   € ØAKÑ>ˆˆR��] L°,à"Ò< }×':Ñ':Ó'<ÒDÀˆ
Ø Ò9 \×%7Ñ%7Ó%9ÒA¸Tˆ	Ø Ò9 \×%7Ñ%7Ó%9ÒA¸Tˆ	ä�‰ØØØØ Ø Ø!ô
ð 	
r   c                 óÎ   — |\  }}}}}}|rJ ‚|xr |j                  «       xs d }|xr |j                  «       xs d }	t        j                  |xs d|xs d|xs d |	xs d ¬«      S )Nr   )ÚxDeviceTableÚyDeviceTable)rŠ   r   ÚAnchor)
r-   rî   rï   rð   rñ   rò   ró   rô   rö   r÷   s
             r   Ú_anchorzVoltToFea._anchor‰  s|   € ØAKÑ>ˆˆR��] L°,á Ð Ð Ø Ò9 \×%7Ñ%7Ó%9ÒA¸Tˆ	Ø Ò9 \×%7Ñ%7Ó%9ÒA¸Tˆ	ä�z‰zØŠG�!ØŠG�!Ø"Ò* dØ"Ò* dô	
ð 	
r   c                 óž  — |j                   }|j                  }| j                  |j                  «      }|| j                  vri | j                  |<   |j                  d«      r|d d |dd  j                  «       z   }n|j                  «       }|| j                  |   vri | j                  |   |<   || j                  |   |   |j                  <   y )NÚMARK_é   )r   Ú
glyph_namerý   rf   rF   râ   r   Ú	component)r-   Ú	anchordefÚ
anchornameÚ	glyphnameÚanchors        r   r_   zVoltToFea._anchorDefinition—  s¿   € Ø—^‘^ˆ
Ø×(Ñ(ˆ	Ø—‘˜iŸm™mÓ,ˆà˜DŸM™MÑ)Ø')ˆD�M‰M˜)Ñ$Ø× Ñ  Ô)Ø# B Q˜¨*°Q°R¨.×*>Ñ*>Ó*@Ñ@‰Jà#×)Ñ)Ó+ˆJØ˜TŸ]™]¨9Ñ5Ñ5Ø35ˆD�M‰M˜)Ñ$ ZÑ0ØDJˆ�‰�iÑ  Ñ,¨Y×-@Ñ-@ÒAr   c           
      ó\  ‡ — |j                   }|j                  }t        |t        j                  «      �r	|j
                  j                  «       D ]ë  \  \  }}\  }}|j                  |dz
     }	|j                  |dz
     }
d}|	|
z   D ]  }t        |t        j                  «      rŒd}Œ! ‰ j                  |	«      }‰ j                  |
«      }‰ j                  |«      }‰ j                  |«      }t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚|j                  t        j                  |d   ||d   ||¬«      «       Œí y t        |t        j                   «      rt|j"                  D ]d  \  }}‰ j                  |«      }‰ j                  |«      }t        |«      dk(  sJ ‚|j                  t        j$                  |d   |fgg g d«      «       Œf y t        |t        j&                  «      �rºi }t)        «       }|j*                  D �]X  \  }}‰ j-                  |› d|j.                  › �«      }t        j0                  |«      }|j3                  «       }t)        «       }|D ]!  }|j5                  |j7                  «       «       Œ# |j9                  |«      s|j;                  |«       |sŒ¡|j5                  |«       |D ]S  }‰ j=                  |«      }‰ j>                  |   d|› �   d   }t        j@                  |||«      } | ‰ jB                  ||f<   ŒU |jD                  D ]@  }!|!j7                  «       D ]+  }"|"|vrg ||"<   ||f||"   vsŒ||"   j                  ||f«       Œ- ŒB �Œ[ tG        ˆ fd„|D «       «      }#tG        ˆ fd	„|D «       «      }$|D �]  }"d}%|#r‰ jH                  |"   }%tK        |%«      D �&cg c]  }&g ‘Œ }}&||"   D ]q  \  }}t        j0                  |«      }tK        d|%dz   «      D ]E  }'|'‰ j>                  |"   |   v sŒ‰ j>                  |"   |   |'   }||'dz
     j                  ||f«       ŒG Œs ‰ j=                  |"«      }!|$rt        jL                  |!|d   «      }n2|#rt        jN                  |!|«      }nt        jP                  |!|d   «      }|j                  |«       �Œ y t        |t        jR                  «      �rbg }(|jT                  D ]/  }|D ](  }!|!j7                  «       D ]  }"|(j                  |"«       Œ Œ* Œ1 g })|jV                  D ]/  }|D ](  }!|!j7                  «       D ]  }"|)j                  |"«       Œ Œ* Œ1 |(D ]‰  }"‰ j=                  |"«      }‰ j>                  |"   d
   d   }*d }+|"|)v r5‰ j>                  |"   d   d   }+|)jY                  |)j[                  |"«      «       |j                  t        j\                  ||*|+«      «       Œ‹ |)D ]N  }"‰ j=                  |"«      }‰ j>                  |"   d   d   }+|j                  t        j\                  |d |+«      «       ŒP y t_        |«      ‚c c}&w )Nrq   FTr   )Ú
enumeratedú.rÿ   c              3   ó:   •K  — | ]  }|‰j                   v –— Œ y ­wr   )rD   ©rs   Únr-   s     €r   ru   z(VoltToFea._gposLookup.<locals>.<genexpr>ô  s   øè ø€ ÒD°q˜a 4§?¡?Ô2ÑDùó   ƒc              3   ó:   •K  — | ]  }|‰j                   v –— Œ y ­wr   )rC   r  s     €r   ru   z(VoltToFea._gposLookup.<locals>.<genexpr>õ  s   øè ø€ Ò<¨q˜!˜tŸ{™{Ô*Ñ<ùr  ÚentryÚexit)0rY   rf   r   r   ÚPositionAdjustPairDefinitionÚadjust_pairrŠ   Úcoverages_1Úcoverages_2r   rÄ   rø   r�   r   r   ÚPairPosStatementÚPositionAdjustSingleDefinitionÚadjust_singleÚSinglePosStatementÚPositionAttachDefinitionrB   Úcoverage_torW   r   Ú	MarkClassr   Úupdater¼   Ú
isdisjointÚdifference_updater¸   rF   ÚMarkClassDefinitionrE   rÇ   ÚallrD   ÚrangeÚMarkMarkPosStatementÚMarkLigPosStatementÚMarkBasePosStatementÚPositionAttachCursiveDefinitionÚcoverages_enterÚcoverages_exitÚpopÚindexÚCursivePosStatementre   ),r-   r˜   Ú	fealookuprY   rf   Ú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Ô   rN   r  Úenter_coverageÚexit_coverager  r  s,   `                                           r   Ú_gposLookupzVoltToFea._gposLookup¦  sP  ø€ Ø×)Ñ)ˆ
à�j‰jˆÜ�cœ4×<Ñ<Õ=Ø.1¯o©o×.CÑ.CÓ.Eò Ñ*‘��t™l˜t TØ Ÿ_™_¨T°A©XÑ6�
Ø Ÿ_™_¨T°A©XÑ6�
ð #�
Ø&¨Ñ3ò *�DÜ% d¬D¯N©NÕ;Ø%)™
ð*ð Ÿ.™.¨Ó4�ØŸ.™.¨Ó4�Ø×*Ñ*¨4Ó0�Ø×*Ñ*¨4Ó0�Ü˜7“| qÒ(Ð(Ð(Ü˜7“| qÒ(Ð(Ð(Ø×!Ñ!Ü×(Ñ(Ø ™
 G¨W°Q©Z¸ÈZôõñ#ô, ˜œT×@Ñ@ÔAØ×)Ñ)ò ‘��1ØŸ™¨Ó*�Ø×)Ñ)¨!Ó,�Ü˜6“{ aÒ'Ð'Ð'Ø×!Ñ!Ü×*Ñ*¨V°A©Y¸Ð,?Ð+@À"ÀbÈ%ÓPõñ	ô ˜œT×:Ñ:Õ;ØˆGÜ“uˆHØ(+¯©ó &JÑ$�˜*ð !ŸO™O¨z¨l¸!¸F¿K¹K¸=Ð,IÓJ�	ÜŸM™M¨)Ó4�	ð (×-Ñ-Ó/�
ô ›�Ø$ò 2�DØ—L‘L §¡£Õ1ð2à×'Ñ'¨Ô1Ø×+Ñ+¨HÔ5Ù Ø Ø—‘ Ô&à!&ò H�IØ ŸO™O¨IÓ6�EØ!Ÿ]™]¨9Ñ5¸¸j¸\Ð6JÑKÈAÑN�FÜ!×5Ñ5°iÀÈÓO�GØ@G�D×%Ñ% y°)Ð&<Ò=ð	Hð  ŸL™Lò J�DØ $§¡£ò J˜Ø wÑ.Ø,.˜G D™MØ&¨	Ð2¸'À$¹-ÒGØ# D™M×0Ñ0°*¸iÐ1HÕIñ	JòJðC&JôP ÓD¸GÔDÓDˆKÜÓ<°GÔ<Ó<ˆGØó (�Ø�
ÙØ!%§¡°Ñ!6�Jä%*¨:Ó%6Ö7 šÐ7�Ð7Ø'.¨t¡}ò M‘O�D˜)Ü #§¡¨iÓ 8�IÜ%*¨1¨j¸1©nÓ%=ò M˜	Ø$¨¯©°dÑ(;¸DÑ(AÒAØ%)§]¡]°4Ñ%8¸Ñ%>¸yÑ%I˜FØ! )¨a¡-Ñ0×7Ñ7¸ÀÐ8KÕLñMðMð —‘ tÓ,�ÙÜ×3Ñ3°D¸%À¹(ÓC‘DÙ Ü×2Ñ2°4¸Ó?‘Dä×3Ñ3°D¸%À¹(ÓC�DØ×!Ñ! $Ö'ñ)(ô* ˜œT×AÑAÕBàˆNØ×/Ñ/ò 4�Ø$ò 4�DØ $§¡£ò 4˜Ø&×-Ñ-¨dÕ3ñ4ñ4ð4ð ˆMØ×.Ñ.ò 3�Ø$ò 3�DØ $§¡£ò 3˜Ø%×,Ñ,¨TÕ2ñ3ñ3ð3ð 'ò O�ØŸ™¨Ó-�ØŸ™ dÑ+¨GÑ4°QÑ7�Ø�Ø˜=Ñ(ØŸ=™=¨Ñ.¨vÑ6°qÑ9�DØ!×%Ñ% m×&9Ñ&9¸$Ó&?Ô@Ø×!Ñ!¤#×"9Ñ"9¸%ÀÈÓ"MÕNðOð &ò N�ØŸ™¨Ó-�Ø—}‘} TÑ*¨6Ñ2°1Ñ5�Ø×!Ñ!¤#×"9Ñ"9¸%ÀÀtÓ"LÕMñNô
 & cÓ*Ð*ùò] 8s   Î)	X)c                 óð  — |j                   }|j                  }t        |t        j                  «      rÜ|j
                  j                  «       D ]¾  \  \  }	}
\  }}| j                  |j                  |	dz
     «      }| j                  |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«      }|j                  |«       ŒÀ y t        |t        j                  «      r•t        j                   «       g}|j"                  D ]*  \  }}|d   j%                  | j                  |d¬«      «       Œ, |rt        j                  |||fg«      }nt        j                  ||||g«      }|j                  |«       y t        |t        j&                  «      r•t        j                   «       g}|j(                  D ]*  \  }}|d   j%                  | j                  |d¬«      «       Œ, |rt        j                  |||fg«      }nt        j                  ||||g«      }|j                  |«       y t+        |«      ‚)Nrq   r   TrÁ   )rY   rf   r   r   r  r  rŠ   rÄ   r  r  r�   r   ÚIgnorePosStatementÚChainContextPosStatementr   r  rÅ   r  r   r  r  re   )r-   r˜   ÚprefixÚsuffixÚignorer+  r,   rY   rf   r,  r-  r.  r/  r2  r3  rÍ   rk   r6  rN   rÇ   s                       r   Ú_gposContextLookupzVoltToFea._gposContextLookup+  sW  € Ø×)Ñ)ˆ
à�j‰jˆÜ�cœ4×<Ñ<Ô=Ø.1¯o©o×.CÑ.CÓ.Eò -Ñ*‘��t™l˜t TØŸ.™.¨¯©¸À¹Ñ)BÓC�ØŸ.™.¨¯©¸À¹Ñ)BÓC�Ü˜7“| qÒ(Ð(Ð(Ü˜7“| qÒ(Ð(Ð(Ø! !™* g¨a¡jÐ1�áÜ #× 6Ñ 6¸ÀÈÐ8PÐ7QÓ R‘Iä #× <Ñ <Ø ¨°¸'Ð0Bó!�Ið ×!Ñ! )Õ,ñ-ô ˜œT×@Ñ@ÔAÜ—n‘nÓ&Ð'ˆFØ×)Ñ)ò B‘��1Ø�q‘	× Ñ  §¡°¸4 Ó!@ÕAðBñ Ü×2Ñ2°V¸VÀVÐ4LÐ3MÓN‘	ä×8Ñ8Ø˜F F¨W¨Ió�	ð ×Ñ˜iÕ(Ü˜œT×:Ñ:Ô;Ü—n‘nÓ&Ð'ˆFØ"Ÿ™ò I‘�˜!Ø�q‘	× Ñ  §¡°À$ Ó!GÕHðIñ Ü×2Ñ2°V¸VÀVÐ4LÐ3MÓN‘	ä×8Ñ8Ø˜F F¨W¨Ió�	ð ×Ñ˜iÕ(ä% cÓ*Ð*r   c                 ó	  ‡— |j                   }|j                  }t        |t        j                  «      �rei }|j
                  j                  «       D ]ñ  \  }}|r|s/|j                  \  }}	}
t        j                  |› d|	› d|
› d�«       Œ9| j                  |«      }| j                  |«      }t        |«      dk(  sJ ‚t        |d   j                  «       |d   j                  «       «      D ]V  \  }}|j                  t        | j!                  |«      «      g «      j#                  t        | j!                  |«      «      «       ŒX Œó |j                  «       D ]A  \  }}t%        j&                  g |g t%        j(                  |«      «      }|j#                  |«       ŒC y |j
                  j                  «       D �]Ä  \  }}|r|s/|j                  \  }}	}
t        j                  |› d|	› d|
› d�«       Œ:| j                  |«      }| j                  |«      }t        |t        j*                  «      rIt        |«      dk(  sJ ‚t        |«      dk(  sJ ‚|j#                  t%        j,                  ||g g d«      «       Œ¿t        |t        j.                  «      rŒÚt        |t        j0                  «      r<t        |«      dk(  sJ ‚|j#                  t%        j2                  g |d   g |«      «       �Œ0t        |t        j4                  «      �rqt        |«      dk(  sJ ‚t%        j6                  g |g |d   d«      }t9        d„ |D «       «      Š‰dkD  �rt;        ˆfd„|D «       «      sJ ‚|D �cg c]  }|j                  «       ‘Œ }}|D �cg c]  }t        |«      dk(  r	|d   g‰z  n|‘Œ }}|d   j                  «       }t        |«      dk(  r	|d   g‰z  }t        |«      ‰k\  sJ ‚|j#                  t%        j<                  d|› �«      «       t        g |¢|‘­Ž D ]N  }|D �cg c]  }| j!                  |«      ‘Œ }}|j#                  t%        j6                  g |d d	 g |d	   d«      «       ŒP �Œ©|j#                  |«       �Œ¼t?        |«      ‚ y c c}w c c}w c c}w )
Nú:ú: Ignoring empty substitutionrq   r   Fc              3   óN   K  — | ]  }t        |j                  «       «      –— Œ y ­wr   ©r�   r¼   )rs   r#   s     r   ru   z(VoltToFea._gsubLookup.<locals>.<genexpr>˜  s   è ø€ Ò:¨aœ˜AŸJ™J›L×)Ñ:ùs   ‚#%c              3   óX   •K  — | ]!  }t        |j                  «       «      ‰d fv –— Œ# y­wrp   rP  )rs   r#   r  s     €r   ru   z(VoltToFea._gsubLookup.<locals>.<genexpr>›  s%   øè ø€ ÒK¸qœs 1§:¡:£<Ó0°Q¸°FÔ:ÑKùs   ƒ'*ú# éÿÿÿÿ) rY   rP   r   r   ÚSubstitutionAlternateDefinitionÚmappingrŠ   r/   rŽ   r�   rÄ   r�   Úzipr¼   Ú
setdefaultr½   r¸   r   r   ÚAlternateSubstStatementrÅ   ÚSubstitutionSingleDefinitionÚSingleSubstStatementÚ+SubstitutionReverseChainingSingleDefinitionÚSubstitutionMultipleDefinitionÚMultipleSubstStatementÚSubstitutionLigatureDefinitionÚLigatureSubstStatementÚmaxr   rˆ   re   )r-   r˜   r+  rY   rP   Ú
alternatesr{   ÚvalÚpathÚlineÚcolumnrÍ   ÚreplacementsÚ	src_glyphÚ
repl_glyphr´   rk   r#   ÚreplacementÚzippedr  s                       @r   Ú_gsubLookupzVoltToFea._gsubLookupY  sW  ø€ Ø×)Ñ)ˆ
à�j‰jˆô
 �cœ4×?Ñ?Õ@ØˆJØŸK™K×-Ñ-Ó/ò ‘��SÙ¡#Ø),¯©Ñ&�D˜$ Ü—K‘K 4 &¨¨$¨¨q°°Ð8UÐ VÔWØØŸ™¨Ó,�Ø#Ÿ~™~¨cÓ2�Ü˜6“{ aÒ'Ð'Ð'Ü-0Ø˜1‘I×&Ñ&Ó(¨,°q©/×*BÑ*BÓ*Dó.ò Ñ)�I˜zð ×)Ñ)¬#¨d¯o©o¸iÓ.HÓ*IÈ2ÓN×UÑUÜ˜DŸO™O¨JÓ7Ó8õñðð (2×'7Ñ'7Ó'9ò -Ñ#��|Ü×7Ñ7Ø˜˜r¤3§>¡>°,Ó#?ó�	ð ×!Ñ! )Õ,ð	-ð
 àŸ™×)Ñ)Ó+ó =	/‰HˆC�Ù™cØ%(§\¡\Ñ"��d˜FÜ—‘˜t˜f A d V¨1¨V¨HÐ4QÐRÔSØØ—^‘^ CÓ(ˆFØŸ>™>¨#Ó.ˆLÜ˜#œt×@Ñ@ÔAÜ˜6“{ aÒ'Ð'Ð'Ü˜<Ó(¨AÒ-Ð-Ð-Ø×!Ñ!Ü×,Ñ,¨V°\À2ÀrÈ5ÓQõô ˜C¤×!QÑ!QÔRàÜ˜C¤×!DÑ!DÔEÜ˜6“{ aÒ'Ð'Ð'Ø×!Ñ!Ü×.Ñ.¨r°6¸!±9¸bÀ,ÓOöô ˜C¤×!DÑ!DÕEÜ˜<Ó(¨AÒ-Ð-Ð-Ü×6Ñ6Ø˜  L°¡O°Uó�	ô Ñ:°6Ô:Ó:�Ø�q“5äÓKÀFÔKÔKÐKÐKØ4:Ö;¨q˜aŸj™j�lÐ;�FÐ;ØJPÖQÀQ¬S°«V°qª[  !¡˜v¨šz¸aÑ?ÐQ�FÐQð #/¨q¡/×":Ñ":Ó"<�KÜ˜;Ó'¨1Ò,Ø'2°1¡~Ð&6¸Ñ&:˜Ü˜{Ó+¨qÒ0Ð0Ð0ð ×%Ñ%¤c§k¡k°B°y°kÐ2BÓ&CÔDä"%Ð"; vÐ";¨{Ò";ò ˜Ø>DÖ!E¸ $§/¡/°!Õ"4Ð!E˜Ð!EØ"×)Ñ)Ü×6Ñ6Ø " F¨3¨B K°°V¸B±ZÀóõòð ×%Ñ% iÖ0ä)¨#Ó.Ð.ñ{=	/ùòF <ùÚQùò  "Fs   ÍQ=Í: RÐRc           	      óL  — |j                   }|j                  }t        |t        j                  «      r¦|j
                  j                  «       D ]�  \  }	}
|	r|
s/|j                  \  }}}t        j                  |› d|› d|› d�«       Œ9| j                  |	«      }| j                  |
«      }|j                  t        j                  ||||«      «       Œƒ g |_        y t        |t        j                  t        j                   t        j"                  t        j$                  f«      st'        t)        |«      «      ‚g }|j
                  j                  «       D ]Z  \  }	}
|	r|
s/|j                  \  }}}t        j                  |› d|› d|› d�«       Œ9|j+                  | j                  |	d¬«      «       Œ\ t-        |«      dkD  rt        j.                  |«      g}|r)|j                  t        j0                  |||fg«      «       y |j                  t        j2                  ||||g«      «       y )NrM  rN  TrÁ   rq   )rY   rP   r   r   r[  rU  rŠ   r/   rŽ   r�   rÄ   r   r   Ú ReverseChainSingleSubstStatementr,   rY  r\  r^  rT  re   rÒ   r   r�   rÅ   ÚIgnoreSubstStatementÚChainContextSubstStatement)r-   r˜   rH  rI  rJ  r+  r,   rY   rP   r{   rb  rc  rd  re  rÍ   rf  s                   r   Ú_gsubContextLookupzVoltToFea._gsubContextLookup¸  sï  € Ø×)Ñ)ˆ
à�j‰jˆä�cœ4×KÑKÔLàŸK™K×-Ñ-Ó/ò ‘��SÙ¡#Ø),¯©Ñ&�D˜$ Ü—K‘K 4 &¨¨$¨¨q°°Ð8UÐ VÔWØØŸ™¨Ó,�Ø#Ÿ~™~¨cÓ2�Ø×!Ñ!Ü×8Ñ8Ø ¨°óõðð !#ˆIÔØäØä×1Ñ1Ü×3Ñ3Ü×3Ñ3Ü×4Ñ4ð	ô
ô &¤d¨3£iÓ0Ð0àˆØŸ™×)Ñ)Ó+ò 	=‰HˆC�Ù™cØ%(§\¡\Ñ"��d˜FÜ—‘˜t˜f A d V¨1¨V¨HÐ4QÐRÔSØØ�M‰M˜$Ÿ.™.¨°d˜.Ó;Õ<ð	=ô ˆv‹;˜Š?Ü—n‘n VÓ,Ð-ˆFÙØ×Ñœc×6Ñ6¸ÀÈÐ8PÐ7QÓRÕSà×ÑÜ×.Ñ.¨v°v¸vÈÀyÓQõr   c           	      óJ	  — d }d }d}|j                   dk(  r|dz  }|j                  s|dz  }|j                  s|dz  }n]t        |j                  t        «      r| j                  |j                  «      }n'|j                  �| j                  |j                  «      }d }|s|€|�t        j                  |||«      }d}| j                  j                  d«      rd}d	|j                  v �rR|j                  j                  d	«      d   }|j                  «       | j                  vrut        | j!                  |«      |¬
«      }|�|j"                  j%                  |«       |j"                  j%                  t        j&                  d|j                  z   «      «       n…| j                  |j                  «          }|j"                  j%                  t        j(                  «       «       |j"                  j%                  t        j&                  d|j                  z   «      «       || j                  |j                  «       <   njt        | j!                  |j                  «      |¬
«      }|�|j"                  j%                  |«       || j                  |j                  j                  «       <   |j*                  �;|j"                  j%                  t        j&                  d|j*                  z   «      «       g }	|j,                  D ]‹  }
| j/                  |
j0                  «      }| j/                  |
j2                  «      }|
j4                  dk(  }|	j%                  |||g«       |sŒ_t7        |j,                  «      dk(  sŒx|	j%                  g g dg«       Œ� |	rÝt        j8                  | j!                  |j                  dz   «      |¬
«      }|j:                  j%                  |«       |j<                  �| j?                  ||«       n|j@                  �| jC                  ||«       |	D ]L  \  }}}|j<                  �| jE                  ||||||«       Œ*|j@                  €Œ7| jG                  ||||||«       ŒN y |j<                  �| j?                  ||«       y |j@                  �| jC                  ||«       y y )Nr   ÚRTLrq   é   é   FÚCOMPILER_USEEXTENSIONLOOKUPSTrÖ   )r.   rR  ÚEXCEPT_CONTEXTz chained)$Ú	directionÚprocess_baseÚprocess_marksr   r½   rº   Úmark_glyph_setr   ÚLookupFlagStatementrG   r·   r   rÙ   r   rA   r(   rT   rY   r   rˆ   ÚSubtableStatementÚcommentsrÉ   rË   ÚleftÚrightÚex_or_inr�   ÚLookupBlockr,   rP   rk  rf   rD  rp  rK  )r-   r˜   Úmark_attachementÚmark_filteringÚflagsÚlookupflagsr.   r   r+  ÚcontextsrÉ   rH  rI  rJ  r,   s                  r   rg   zVoltToFea._lookupDefinitionê  s   € ØÐØˆàˆØ×Ñ˜uÒ$Ø�Q‰JˆEØ×"Ò"Ø�Q‰JˆEð ×#Ò#Ø�Q‰J‰EÜ˜×,Ñ,¬cÔ2Ø#Ÿ™¨v×/CÑ/CÓDÑØ×"Ñ"Ð.Ø!Ÿ_™_¨V×-BÑ-BÓCˆNàˆÙÐ$Ð0°NÐ4NÜ×1Ñ1ØÐ'¨óˆKð ˆØ�>‰>×ÑÐ<Ô=Ø ˆMà�6—;‘;Òð —;‘;×$Ñ$ TÓ*¨1Ñ-ˆDØ�z‰z‹| 4§=¡=Ñ0Ü"Ø×$Ñ$ TÓ*Ø"/ô�	ð Ð*Ø×(Ñ(×/Ñ/°Ô<Ø×$Ñ$×+Ñ+¬C¯K©K¸¸v¿{¹{Ñ8JÓ,KÕLà ŸM™M¨$¯*©*«,Ñ7�	Ø×$Ñ$×+Ñ+¬C×,AÑ,AÓ,CÔDØ×$Ñ$×+Ñ+¬C¯K©K¸¸v¿{¹{Ñ8JÓ,KÔLØ*3ˆD�M‰M˜$Ÿ*™*›,Ò'äØ× Ñ  §¡Ó-Ø+ôˆIð Ð&Ø×$Ñ$×+Ñ+¨KÔ8Ø1:ˆD�M‰M˜&Ÿ+™+×+Ñ+Ó-Ñ.à�?‰?Ð&Ø× Ñ ×'Ñ'¬¯©°D¸6¿?¹?Ñ4JÓ(KÔLàˆØ—~‘~ò 	1ˆGØ—]‘] 7§<¡<Ó0ˆFØ—]‘] 7§=¡=Ó1ˆFØ×%Ñ%Ð)9Ñ9ˆFØ�O‰O˜V V¨VÐ4Ô5ò œ#˜fŸn™nÓ-°Ó2Ø—‘  R¨ Õ0ð	1ñ Ü—o‘oØ× Ñ  §¡¨zÑ!9Ó:Ø+ôˆGð ×Ñ×$Ñ$ WÔ-Ø�z‰zÐ%Ø× Ñ  ¨Õ1Ø—‘Ð'Ø× Ñ  ¨Ô1Ø*2ò Ñ&�˜ Ø—:‘:Ð)Ø×+Ñ+Ø ¨°¸	À7õð —Z‘ZÑ+Ø×+Ñ+Ø ¨°¸	À7õñð �z‰zÐ%Ø× Ñ  ¨Õ3Ø—‘Ð'Ø× Ñ  ¨Õ3ð (r   r   )F)NF)r1   r2   r3   ÚreÚcompilerO   rV   r+   rT   rW   rm   rª   r²   r¸   rº   r¾   rÄ   rË   r]   r[   rc   ra   rø   rý   r_   rD  rK  rk  rp  rg   rr   r   r   r6   r6   `   s§   „ Ø$˜"Ÿ*™*Ð%6Ó7ÐØ#˜Ÿ™Ð$7Ó8Ðóò4(ò'ó"2òHVópò>òDò
óò.	ò:ò;ò BóHò
ò 
òKòC+òJ,+ò\]/ò~0ód]4r   r6   c           
      ó4  — ddl }ddlm} ddlm} |j                  dt        j                  ¬«      }|j                  dd|d	¬
«       |j                  dd|d¬
«       |j                  dddt        dd¬«       |j                  dddd¬«       |j                  ddd¬«       |j                  | «      } ||j                  rdnd¬«       |j                  }d}	 t        |«      }d|v r(t        |d   j                  j!                  d«      «      }nt"        j%                  d «       y!	 t)        ||«      }	 |j+                  |j,                  «      }	t7        |j8                  d'«      5 }|j;                  |	«       ddd«       y# t&        $ r Y Œdw xY w# t.        $ ru}
|j0                  r‚ t3        |
j4                  d   d"d«      }d#|
› d$�}|r'|\  }}}t"        j%                  |› d%|› d%|› d&|› �«       nt"        j%                  |«       Y d}
~
y!d}
~
ww xY w# 1 sw Y   yxY w)(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   ri   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?rq   r/   ú"z" is not supportedrM  z: Úw)ÚargparseÚpathlibrŠ  Ú	fontToolsr‹  ÚArgumentParserÚmainÚ__doc__Úadd_argumentr®   Ú
parse_argsÚquietr�  r   r   ÚdataÚdecoderŽ   Úerrorr   r6   r²   ri   re   Ú	tracebackÚgetattrÚargsÚopenr‘  Úwrite)r«  r�  rŠ  r‹  ÚparserÚoptionsrJ   rK   Ú	converterr±   Úer/   Úmessagerc  rd  re  Úfeafiles                    r   r¡  r¡  J  s>  € ó Ýå&à×$Ñ$Ø%´4·<±<ð %ó €Fð ×ÑØ˜ tÐ2Rð ô ð ×ÑØ˜x¨dÐ9Nð ô ð ×ÑØØØÜØØIð ô ð ×ÑØˆi Ð3Pð ô ð ×ÑØ˜lÐ1Kð ô ð ×Ñ Ó%€Gá 7§=¢=™°fÕ>à—=‘=€LØ€DðÜ�lÓ#ˆØ�T‰>Ü# D¨¡L×$5Ñ$5×$<Ñ$<¸WÓ$EÓF‰Lä�I‰IÐNÔOØð ô ˜,¨Ó-€IðØ×Ñ §¡Ó/ˆô 
ˆg×!Ñ! 3Ó	'ð ¨7Ø�‰�cÔ÷ð øô# ò Ùðûô ò 
Ø×ÒØÜ˜1Ÿ6™6 !™9 j°$Ó7ˆØ�a�SÐ*Ð+ˆÙØ!)ÑˆD�$˜Ü�I‰I˜˜˜a ˜v Q v h¨b°°	Ð:Õ;ä�I‰I�gÔÜûð
ú÷ð ús8   ÃAE> Ä2F Å#HÅ>	F
Æ	F
Æ	HÆA+HÈHÈHÚ__main__r   )r¢  Úloggingr‡  Úior   Úgraphlibr   ÚfontTools.feaLibr   ÚfontTools.ttLibr   r   ÚfontTools.voltLibr   ÚfontTools.voltLib.parserr   r¬   Ú	getLoggerrŽ   r®   r   r&   r�  r(   r6   r¡  r1   Úsysr  rr   r   r   ú<module>r¾     sŒ   ðñ+óZ Û 	Ý Ý &å  ß .Ý )Ý 9à€g×ÑÐ5Ó6€â	!€ò	ò?ôˆS�_‰_ô ÷g4ñ g4óT?ðD ˆzÒÛà€C‡H�H‰T‹VÕð r   