403Webshell
Server IP : 35.80.110.71  /  Your IP : 216.73.216.52
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.3.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/fontTools/feaLib/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/fontTools/feaLib/__pycache__/builder.cpython-312.pyc
�

jke@
���ddlmZddlmZmZmZmZddlmZddl	m
Z
mZmZddl
mZddlmZddlmZddlmZdd	lmZdd
lmZmZddlmZmZddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-dd
l.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5ddl6m7Z7m8Z8ddl9m:Z:ddl;Z;ddl<Z<ddl=m>Z>ddl?Z?ddl@Z@ddlAZAe?j�eC�ZDdd�ZE	dd�ZFGd�deG�ZHy)�)�sstruct)�Tag�tostr�
binary2num�safeEval)�FeatureLibError)�LookupDebugInfo�LOOKUP_DEBUG_INFO_KEY�LOOKUP_DEBUG_ENV_VAR)�Parser)�FeatureFile)�VariableScalar)�builder)�
maxCtxFont)�newTable�getTableModule)�otBase�otTables)�AlternateSubstBuilder�ChainContextPosBuilder�ChainContextSubstBuilder�LigatureSubstBuilder�MultipleSubstBuilder�CursivePosBuilder�MarkBasePosBuilder�MarkLigPosBuilder�MarkMarkPosBuilder�ReverseChainSingleSubstBuilder�SingleSubstBuilder�ClassPairPosSubtableBuilder�PairPosBuilder�SinglePosBuilder�ChainContextualRule)�OpenTypeLibError)�OnlineVarStoreBuilder)�buildVarDevTable)�addFeatureVariationsRaw)�normalizeValue�piecewiseLinearMap)�defaultdictN)�StringIOc�B�t||�}|j||��y)a�Add features from a file to a font. Note that this replaces any features
    currently present.

    Args:
        font (feaLib.ttLib.TTFont): The font object.
        featurefile: Either a path or file object (in which case we
            parse it into an AST), or a pre-parsed AST instance.
        tables: If passed, restrict the set of affected tables to those in the
            list.
        debug: Whether to add source debugging information to the font in the
            ``Debg`` table

    ��tables�debugN)�Builder�build)�font�featurefiler.r/rs     �:/usr/lib/python3/dist-packages/fontTools/feaLib/builder.py�addOpenTypeFeaturesr52s ���d�K�(�G��M�M��u�M�-�c�\�tt|��}|r||_t||||��y)aeAdd features from a string to a font. Note that this replaces any
    features currently present.

    Args:
        font (feaLib.ttLib.TTFont): The font object.
        features: A string containing feature code.
        filename: The directory containing ``filename`` is used as the root of
            relative ``include()`` paths; if ``None`` is provided, the current
            directory is assumed.
        tables: If passed, restrict the set of affected tables to those in the
            list.
        debug: Whether to add source debugging information to the font in the
            ``Debg`` table

    r-N)r+r�namer5)r2�features�filenamer.r/r3s      r4�addOpenTypeFeaturesFromStringr;Ds+��&�5��?�+�K��#�����k�&��Fr6c
���eZdZed�dD��Zd�ZdZd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�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/�Z0d0�Z1d1�Z2d2�Z3d3�Z4d4�Z5d5�Z6d6�Z7d7�Z8d8�Z9	d[d9�Z:d:�Z;d;�Z<d<�Z=d=�Z>d>�Z?d?�Z@d@�ZAdA�ZBdB�ZCdC�ZDdD�ZEdE�ZFdF�ZGdG�ZHdH�ZIdI�ZJdJ�ZKdK�ZLdL�ZMdM�ZNdN�ZOdO�ZPdP�ZQdQ�ZRdR�ZSdS�ZTdT�ZUdU�ZVeWj�D����cic]4\}}}}|j�dV�s|dWj��|dXdz||f��6c}}}}Z[dY�Z\ycc}}}}w)\r0c#�2K�|]}t|����y�w�N)r)�.0�tags  r4�	<genexpr>zBuilder.<genexpr>^s���� ��	�C�� �s�)
�BASE�GDEF�GPOS�GSUB�OS/2�head�hhear8�vhea�STATc���||_t|t�r|dc|_|_nd|c|_|_|j�|_d|_d|vrF|dj|_t|jD�cgc]}|j��c}�|_t�|_d|_
d|_d|_t�|_d|_i|_d|_d|_d|_g|_iid�|_i|_i|_i|_g|_d|_i|_t�|_i|_t�|_ i|_!i|_"tGtH�|_%d|_&d|_'g|_(d|_)d|_*i|_+i|_,i|_-i|_.i|_/i|_0i|_1i|_2i|_3i|_4i|_5i|_6i|_7ycc}w)N�fvarrF)rErD)8r2�
isinstancer
�	parseTree�file�getReverseGlyphMap�glyphMap�varstorebuilder�axesr%�axisTag�set�default_language_systems_�script_�lookupflag_�lookupflag_markFilterSet_�language_systems�seen_non_DFLT_script_�named_lookups_�cur_lookup_�cur_lookup_name_�cur_feature_name_�lookups_�lookup_locations�	features_�required_features_�feature_variations_�aalt_features_�aalt_location_�aalt_alternates_�
featureNames_�featureNames_ids_�cv_parameters_�cv_parameters_ids_�cv_num_named_params_r*�list�cv_characters_�size_parameters_�
fontRevision_�names_�base_horiz_axis_�base_vert_axis_�
attachPoints_�ligCaretCoords_�ligCaretPoints_�glyphClassDefs_�markAttach_�markAttachClassID_�markFilterSets_�os2_�hhea_�vhea_�stat_�conditionsets_�model_cache)�selfr2r3�axs    r4�__init__zBuilder.__init__ns�����	��k�;�/�(3�T�%�D�N�D�I�(,�k�%�D�N�D�I��/�/�1��
�#����T�>��V��)�)�D�I�#8�&*�i�i�0�����0�$�D� �*-���&�������)-��&� #����%*��"� ������ $���!%�����
�)+�R� 8������"$���#%�� � ���"��� "��� �U���!#���!�e���"$���$&��!�)�$�/��� $���!������ $���#������!���!���!������"$���!�����	���
���
���
� �������w1s�>G4Nc����j�3t�j�j�j	��_�jj��|�
�j}nEt|�}|�jz
}|r)djt|��}td|�d���d|vr�j�d|vr�j�d|vr�j�d|vr�j�d|vr�j�d	|vr�j!�d
|vr�j#�dD]�}||vr��j%|�}�j&r�j)||�|j*j,dkDs2|j.j0dkDs|j2j4dkDr"t7|�x}�j8|<||_��|�j8vs���j8|=��t=�fd
�dD��r5d	�j8vr't?�j8��j8d	_ d|vr=�jC�}|r|�j8d<nd�j8vr
�j8d=d|vr=�jE�}	|	r|	�j8d<nd�j8vr
�j8d=|s#tFjHjKtL�r�jO�yy)Nz, z9The following tables were requested but are unsupported: �.rErGrHrIr8rFrJ�rDrErc3�:�K�|]}|�jv���y�wr>)r2)r?r@r�s  �r4rAz Builder.build.<locals>.<genexpr>�s�����<�C�s�d�i�i��<�s�rCrB)(rNrrOrQ�parser1�supportedTables�	frozenset�join�sorted�NotImplementedError�build_feature_aalt_�
build_head�
build_hhea�
build_vhea�
build_name�
build_OS_2�
build_STAT�	makeTablerd�makeFeatureVariations�
ScriptList�ScriptCount�FeatureList�FeatureCount�
LookupList�LookupCountrr2�table�anyr�usMaxContext�	buildGDEF�	buildBASE�os�environ�getr�	buildDebg)
r�r.r/�unsupported�unsupported_stringr@r��	fontTable�gdef�bases
`         r4r1z
Builder.build�s�����>�>�!�#�D�I�I�t�}�}�=�C�C�E�D�N������T�"��>��)�)�F��v�&�F� �4�#7�#7�7�K��%)�Y�Y�v�k�/B�%C�"�)�O�)�*�!�-����V���$�$�&��V���O�O���V���O�O���V���O�O���V���O�O���V���O�O���V���O�O��#�	#�C��&� ���N�N�3�'�E��'�'��*�*�5�#�6�� � �,�,�q�0��$�$�1�1�A�5��#�#�/�/�!�3�-5�c�]�:�	�D�I�I�c�N�"'�	����	�	�!��I�I�c�N�	#��<�+;�<�<��4�9�9�AT�-7��	�	�-B�D�I�I�f��*��V���>�>�#�D��$(��	�	�&�!��4�9�9�$��I�I�f�%��V���>�>�#�D��$(��	�	�&�!��4�9�9�$��I�I�f�%��B�J�J�N�N�#7�8��N�N��9r6c��||j|�}|j|_|j|_|j
j
|�|Sr>)r2rX�
lookupflagrY�
markFilterSetr`�append)r��location�
builder_class�results    r4�get_chained_lookup_zBuilder.get_chained_lookup_�sE���t�y�y�(�3�� �,�,���#�=�=����
�
���V�$��
r6c��|jD]5\}}|||f}|jj|g�j|��7yr>)rZrb�
setdefaultr�)r��lookup�feature_name�script�lang�keys      r4�add_lookup_to_feature_zBuilder.add_lookup_to_feature_�sF�� �1�1�	>�L�F�D��4��.�C��N�N�%�%�c�2�.�5�5�f�=�	>r6c��|jrjt|j�|k(rR|jj|jk(r/|jj|j
k(r|jS|jr|jrtd|��||j|�|_|j|j_|j
|j_|jj|j�|jr#|j|j|j<|jr&|j|j|j�|jS)NzOWithin a named lookup block, all rules must be of the same lookup type and flag)r]�typer�rXr�rYr^rr2r`r�r\r_r�)r�r�r�s   r4�get_lookup_zBuilder.get_lookup_s1������T�%�%�&�-�7�� � �+�+�t�/?�/?�?�� � �.�.�$�2P�2P�P��#�#�#�� � �T�%5�%5�!�0���
�
)����H�=���&*�&6�&6����#�)-�)G�)G����&��
�
���T�-�-�.�� � �9=�9I�9I�D���� 5� 5�6��!�!�
�'�'��(8�(8�$�:P�:P�Q����r6c��|js
|jsy|jj�D��cic]\}}|t|���}}}|jdgzD]�\}}|jj�D����	cgc]\\}}}}	||k(r||||	f��c}	}}}}|s!|dk7rtj|�d|�d���g|D]w\}}}}	|	D]k}
t|
t�s|
g}
|
D]Q}|j�j�D].\}}
|j|t��j|
��0�S�m�y��|j�D��cic]#\}}t|�dk(s�|t|�d��%}}}|j�D��cic]5\}}t|�dkDr"|t||jj����7}}}|s|sy|jj�D����	cic]\\}}}}	|dk7r|||f|	��c}	}}}|_|j }g|_|j#|j$d�|r|j't(�}||_|r|j't,�}||_|j1�|j j3|�ycc}}wcc}	}}}wcc}}wcc}}wcc}	}}}w)N)N�aaltr�z
: Feature z has not been defined�r�r�)rerg�itemsrUrb�warnings�warnrMrm�getAlternateGlyphsr��update�lenr�r2�
getGlyphIDr`�
start_featurerfr�r�mappingr�
alternates�end_feature�extend)r��g�ar�r�r8r�r��feature�lookups�
lookuplistr��glyph�alts�repl�single�multi�old_lookups�
single_lookup�multi_lookups                    r4r�zBuilder.build_feature_aalt_s����"�"�4�+@�+@��,0�,A�,A�,G�,G�,I�J�D�A�q�a��Q��i�J�
�J�"�1�1�^�4D�D�	M�N�H�d�9=���8L�8L�8N���4�+�V�T�7�W��d�?���w��0��G��t�v�~��
�
�x�QU�V�W��29�
M�.���g�w�")�M�J�%�j�$�7�&0�\�
�",�M��+1�+D�+D�+F�+L�+L�+N�M�K�E�4�&�1�1�%���?�F�F�t�L�M�M�M�
M�	M�$5?�4D�4D�4F�
�%0�U�D�#�d�)�WX�.�E�4��:�a�=� �
��
� *�/�/�1�
���t��4�y�1�}�
�6�$�D�I�I�$8�$8�9�9�
��
�
�e��59�N�N�4H�4H�4J�
�
�0�'���w���&� ��T�7�#�W�,�
���
�m�m����
����4�.�.��7�� �,�,�X�7I�J�M�$*�M�!���+�+�H�6K�L�L�&+�L�#������
�
���[�)��[K���� 
��

��
s#�J4�J:�K�/K�:K�7K
c��|jsy|jjd�}|sKtd�x}|jd<|j	d|j�d|_dx|_|_|j|_y)NrGs6g�?l�e)	rpr2r�r�	decompile�tableVersion�created�modified�fontRevision�r�r�s  r4r�zBuilder.build_headOsq���!�!���	�	�
�
�f�%���(0��(8�8�E�D�I�I�f�%��O�O�J��	�	�2�!$�E��-7�7�E�M�E�N�!�/�/��r6c���|jsy|jjd�}|s=td�x}|jd<|j	d|j�d|_d|jvr|jd|_d|jvr|jd|_d|jvr|jd|_d|jvr|jd|_	yy)NrH�$��caretoffset�ascender�	descender�linegap)
r|r2r�rr�r��caretOffset�ascent�descent�lineGapr�s  r4r�zBuilder.build_hheaZs����z�z���	�	�
�
�f�%���(0��(8�8�E�D�I�I�f�%��O�O�J��	�	�2�!+�E���D�J�J�&� $�
�
�=� 9�E������#��:�:�j�1�E�L��$�*�*�$� �J�J�{�3�E�M���
�
�"� �J�J�y�1�E�M�#r6c��|jsy|jjd�}|s=td�x}|jd<|j	d|j�d|_d|jvr|jd|_d|jvr|jd|_d|jvr|jd|_yy)NrIr�i�verttypoascender�verttypodescender�verttypolinegap)	r}r2r�rr�r�r�r�r�r�s  r4r�zBuilder.build_vheaks����z�z���	�	�
�
�f�%���(0��(8�8�E�D�I�I�f�%��O�O�J��	�	�2�!+�E������+��:�:�&8�9�E�L��$�*�*�,� �J�J�':�;�E�M���
�
�*� �J�J�'8�9�E�M�+r6c��|jD�cgc]}|j��}}tdd�D]
}||vs�|cSycc}w)N�i�)�names�nameID�range)r�r�r8�nameIDs�user_name_ids     r4�get_user_name_idzBuilder.get_user_name_idzsF��+0�;�;�7�4�4�;�;�7��7�!�#�u�-�	$�L��7�*�#�#�	$��8s�>c��d}|dk(rftj�}|j\|_|_|_|_||jvr|j||_|Sd|_|S||jvrP|js	|S||jvsJ�tj�}d|_|j||_|S||jvr�tj�}d|_|j j#|dfd�|_|j j#|dfd�|_|j j#|dfd�|_|j*j#|d�|_|j j#|dfd�|_t1|j2|�|_|j2||_|S)N�sizer�FeatUILabelNameID�FeatUITooltipTextNameID�SampleTextNameID�ParamUILabelNameID_0)r�FeatureParamsSizero�
DesignSize�SubfamilyID�
RangeStart�RangeEndri�SubfamilyNameIDrh�FeatureParamsStylisticSet�Version�UINameIDrj�FeatureParamsCharacterVariants�Formatrkr�r�r�r�rl�NumNamedParameters�FirstParamUILabelNameIDr�rn�	CharCount�	Character)r�r@�paramss   r4�buildFeatureParamszBuilder.buildFeatureParams�s������&�=��/�/�1�F��%�%�
��!��"��!����d�,�,�,�)-�)?�)?��)D��&�<�
�9*+��&�8�
�7�D�&�&�
&��)�)��0�
�-�d�4�4�4�4�4�!�;�;�=��!"���"&�"8�"8��"=���&�
�%�D�'�'�
'��<�<�>�F��F�M�'+�'>�'>�'B�'B��)�*�A�(�F�$�.2�-D�-D�-H�-H��/�0�!�.�F�*�'+�&=�&=�&A�&A��(�)�1�'�F�#�)-�(A�(A�(E�(E�c�1�(M�F�%�-1�-D�-D�-H�-H��,�-�q�.�F�*� #�4�#6�#6�s�#;�<�F��#�2�2�3�7�F���
r6c��|jsy|jjd�}|s!td�x}|jd<g|_|jD]�}|\}}}}}t|t�s�|}||jvrM||jvr/|j|�|j|<|j|�J�|j|}n]|d|jvrL||jvr/|j|�|j|<|j|�J�|j|}|j|||||���|jj�y)Nr8r)rqr2r�rr�rM�intrhrir�rjrk�setName�sort)	r�r�r8r��
platformID�	platEncID�langID�stringr@s	         r4r�zBuilder.build_name�s\���{�{���	�	�
�
�f�%���(0��(8�8�E�D�I�I�f�%��E�K��K�K�	I�D�<@�9�F�J�	�6�6��f�c�*����$�,�,�,��$�"8�"8�8�6:�6K�6K�E�6R��.�.�s�3�#�5�5�c�:�F�F�F�!�3�3�C�8�F���V�t�2�2�2��$�"9�"9�9�7;�7L�7L�U�7S��/�/��4�#�6�6�s�;�G�G�G�!�4�4�S�9�F��M�M�&�&�*�i��H�!	I�"	�����r6c��|jsy|jjd�}|satd�x}|jd<dt	j
t
d�j�z}|j||j�d}d|jvr|jd|_	d|jvrlt
d�j�}|jd\
|_|_|_
|_|_|_|_|_|_|_||_d|jvr|jd|_d|jvr|jd|_d|jvr|jd|_d	|jvr|jd	|_d
|jvr|jd
|_d|jvr#t7d|jdzdz�|_d
|jvr|jd
|_d|jvr|jd|_d|jvr|j?|jd�d|jvr/|jA|jd�}|\|_!|_"d}d|jvr|jd|_#d}d|jvr|jd|_$d}d|jvr|jd|_%d}d|jvr|jd|_&d}d�}tO||jP�|_(|dk\r	||d�|dk\r	||d�|dk\r
||d�yy)NrF�r�fstype�panose�typoascender�
typodescender�typolinegap�	winascent�
windescent�vendorz'''�weightclass�
widthclass�unicoderange�
codepageranger��xheight��	capheight�loweropsize��upperopsizec�F�|D]}t||�r�t||d��y�Nr)�hasattr�setattr)r��attrs�attrs   r4�	checkattrz%Builder.build_OS_2.<locals>.checkattrs'���
,���u�d�+��E�4��+�
,r6)�ulCodePageRange1�ulCodePageRange2)�sxHeight�
sCapHeight�
usDefaultChar�usBreakCharr�)�usLowerOpticalPointSize�usUpperOpticalPointSize))r{r2r�rr�calcsizer�OS2_format_0r��fsType�Panose�bFamilyType�bSerifStyle�bWeight�bProportion�	bContrast�bStrokeVariation�	bArmStyle�bLetterForm�bMidline�bXHeightr�
sTypoAscender�sTypoDescender�sTypoLineGap�usWinAscent�usWinDescentr�	achVendID�
usWeightClass�usWidthClass�setUnicodeRanges�build_codepages_r3r4r5r6r9r:�max�version)r�r��datarTr�pagesr2s       r4r�zBuilder.build_OS_2�s3���y�y���	�	�
�
�f�%���(0��(8�8�E�D�I�I�f�%��7�+�+�N�6�,B�,O�,O�P�P�D��O�O�D�$�)�)�,����t�y�y� ��9�9�X�.�E�L��t�y�y� �#�F�+�2�2�4�F��	�	�(�#�
��"��"����"�� ��'�� ��"�����!�E�L��T�Y�Y�&�"&�)�)�N�";�E���d�i�i�'�#'�9�9�_�#=�E� ��D�I�I�%�!%���=�!9�E���$�)�)�#� $�	�	�+� 6�E���4�9�9�$�!%���<�!8�E���t�y�y� �&�u�t�y�y��/B�'B�U�'J�K�E�O��D�I�I�%�"&�)�)�M�":�E���4�9�9�$�!%���<�!8�E���T�Y�Y�&��"�"�4�9�9�^�#<�=��d�i�i�'��)�)�$�)�)�O�*D�E�E�=B�:�E�"�E�$:��G���	�	�!�!�Y�Y�y�1�E�N��G��$�)�)�#�#�y�y��5�E���G��D�I�I�%�,0�I�I�m�,D�E�)��G��D�I�I�%�,0�I�I�m�,D�E�)��G�	,�
�G�U�]�]�3��
��a�<��e�E�F��a�<����	
��a�<��e�S�T�r6c���dD]}||jvs�t|�d�|��t|t�r||jd<yt|t�r||jd<yt|��)N)�ElidedFallbackName�ElidedFallbackNameIDz is already set.rYrX)r~rrMrrm�AssertionError)r��valuer��tokens    r4�setElidedFallbackNamezBuilder.setElidedFallbackNamesz��D�	�E���
�
�"�%��g�-�.����	��e�S�!�16�D�J�J�-�.�
��t�
$�/4�D�J�J�+�,� ��'�'r6c�j�d|jvrg|jd<|jd�|jdD�vrtd|j�d�|��|jd�|jdD�vrtd|j�d�|��|jdj	|�y)N�
DesignAxesc3�4K�|]}|j���y�wr>)r@�r?�rs  r4rAz(Builder.addDesignAxis.<locals>.<genexpr>-s����F��a�e�e�F���z$DesignAxis already defined for tag "z".c3�4K�|]}|j���y�wr>)�	axisOrderras  r4rAz(Builder.addDesignAxis.<locals>.<genexpr>2s����#R�A�A�K�K�#R�rcz+DesignAxis already defined for axis number r�)r~r@rrer�)r��
designAxisr�s   r4�
addDesignAxiszBuilder.addDesignAxis*s����t�z�z�)�')�D�J�J�|�$��>�>�F�T�Z�Z��-E�F�F�!�6�z�~�~�6F�b�I���
����#R����L�9Q�#R�R�!�=�j�>R�>R�=S�ST�U���
�	
�
�
�<� �'�'�
�3r6c�\�d|jvrg|jd<|jdD]�}|jD�chc]}|j���c}|jD�chc]}|j���c}k(s�U|jD�chc]}|j���c}|jD�chc]}|j���c}k(s��|j|jk(s��td|��|jdj
|�ycc}wcc}wcc}wcc}w)N�AxisValueRecordsz8An AxisValueRecord with these values is already defined.)r~r��asFea�	locations�flagsrr�)r��axisValueRecordr��record_�ns     r4�addAxisValueRecordzBuilder.addAxisValueRecord9s����T�Z�Z�/�-/�D�J�J�)�*��z�z�"4�5�	�G�$+�M�M�2�q�����2�'6�'<�'<�=�!�A�G�G�I�=�>�(/�(9�(9�:�1�Q�W�W�Y�:�'6�'@�'@�A�!�A�G�G�I�A�B��M�M�_�%:�%:�:�%�N����	�	
�
�
�%�&�-�-�o�>��3��=��:��As�D�%D�D$�7D)c	���|jsy|jjd�}|stdd��|jjd�}i}g}|D]}g||j<�|��q|D�]k}i}|jdkDr|j|d<t|j�dk(r�|jd}|j}	t|	�dk(r!|j|	d|jd��t|	�dk(r%|j|	d|	d|jd	��t|	�d
k(r&|	\}
}}|j|
|||jd��||jj|���
|j|jD�
cic]}
|
j|
jd��c}
|jd��|j|���n|D�cgc]4}|j|j|j||jd
���6}}|jjd�}|s!td�x}|jd<g|_	d|jvr2|jd}|j|�}|s-td|�d�d��d|jvr|jd}tj |j||��ycc}
wcc}w)Nr_zDesignAxes not definedrirrlr�)r[r8r')r[�linkedValuer8�)�nominalValue�
rangeMinValue�
rangeMaxValuer8)r�r8)�orderingr@r8�valuesr8rYzElidedFallbackNameID z; points to a nameID that does not exist in the "name" tablerX)rk�elidedFallbackName)r~r�rr@rlr�rkrxr�r�r�rer2r�getDebugName�otl�buildStatTable)r�rS�axisValueRecords�
axisValues�format4_locationsr@�avr�
valuesDictr�rx�nominal�minVal�maxVal�ir��
designAxes�	nameTabler�r8s                   r4r�zBuilder.build_STATKs����z�z���z�z�~�~�l�+���!�":�D�A�A��:�:�>�>�*<�=���
����	%�C�"$�J�s�w�w��	%��'�'�#
9���
��9�9�q�=�*-�)�)�J�w�'��s�}�}�%��*�"�}�}�Q�/�H�%�_�_�F��6�{�a�'�"�)�)�F�1�I�s�y�y�*Q�R��6�{�a�'�"�)�)�)/���/5�a�y�(+�	�	����6�{�a�'�28�/����"�)�)�07�17�17�(+�	�	�	���x�|�|�,�3�3�J�?��%�%�EH�]�]�(S����������);�(S�$'�I�I���&�,�,�Z�8�G#
9�X�
���K�K��u�u����$�Q�U�U�+�	
�
�
�
��I�I�M�M�&�)�	��,4�V�,<�<�I��	�	�&�)� �I�O�!�T�Z�Z�/��Z�Z� 6�7�F��)�)�&�1�D��%�+�F�8�4#�#��	��"�T�Z�Z�
/��Z�Z� 4�5�F�����I�I��'�%�		
��E)T��
s�!K
�$9K#c���idd�dd�dd�dd�d	d
�dd�d
d�dd�dd�dd�dd�dd�dd�dd�dd�dd �d!d"�d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1��}|D�cgc]}||vs�||��}}g}td�D]L}|jd2�t|d3z|dzd3z�D]!}||vr||xxd4z
cc<�||xxd5z
cc<�#�N|D�cgc]}t|ddd6����c}Scc}wcc}w)7Ni�ri�r�i�r'i�rsi��i�r*i��i��i��ij�i��i��i��i��iQ�ie�0ib�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?)iai`i_i^i]i\iYiWiTii�i�iRi��� �1�0���)r�r�r)r�rV�
pages2bits�p�bitsr��js       r4rRzBuilder.build_codepages_�s��� 
��!� 
��!� 
�
�!� 
�
�!�	 
�

�!� 
�
�!�
 
�
�!� 
�
�!� 
�
�!� 
�
�� 
�
�� 
�
�� 
�
�� 
�
�� 
�
�"� 
� 
��! 
�"
��# 
�$��������������? 
�
�B(-�@�!��Z��
�1�
�@��@����q��	$�A��L�L����1�r�6�A��E�R�<�0�
$����9��!�H��O�H��!�H��O�H�	
$�	$�.3�3��
�1�T�r�T�7�#�3�3��A��4s�	C�C�>Cc��|js
|jsytj�}d|_|j|j�|_|j|j�|_td�}||_	|S)Nr�rB)
rrrsrrBr�
buildBASEAxis�	HorizAxis�VertAxisrr�)r�r�r�s   r4r�zBuilder.buildBASE�sn���$�$�T�-A�-A���}�}���!����+�+�D�,A�,A�B����*�*�4�+?�+?�@��
��&�!������
r6c�&�|sy|\}}tj�}tj�|_||j_t	|�|j_tj�|_g|j_t	|�|j_t|�D�]]}tj�}|d|_
tj�|_d|j_tj�|j_
|j|d�|jj_g|jj_t	|d�|jj_|dD]S}tj �}d|_||_|jjj j)|��U|jjj)|���`|S)Nrr�r')r�Axis�BaseTagList�BaselineTagr��BaseTagCount�BaseScriptList�BaseScriptRecord�BaseScriptCountr��
BaseScriptTag�
BaseScript�BaseLangSysCount�
BaseValues�index�DefaultIndex�	BaseCoord�BaseCoordCountr	�
Coordinater�)r��axis�bases�scriptsr��record�c�coords        r4r�zBuilder.buildBASEAxis�s��������w��}�}���#�/�/�1���',����$�(+�E�
����%�&�5�5�7���/1����,�.1�'�l����+��W�o�	@�F��.�.�0�F�#)�!�9�F� � (� 3� 3� 5�F��12�F���.�+3�+>�+>�+@�F���(�8=���F�1�I�8N�F���(�(�5�57�F���(�(�2�:=�f�Q�i�.�F���(�(�7��A�Y�
E�� �*�*�,�� ���#$�� ��!�!�,�,�6�6�=�=�e�D�	
E�

���0�0�7�7��?�	@��r6c��tj�}|j�|_t	j
|j|j�|_t	j|j|j|j�|_|j�|_|j�|_|j rdnd|_|j$r�|j$j'�}|red|_||_|j+�}|j-|�d|j.vr(|j.dj0j-|�|j2j5�t7|j|j|j|j|j f�st9|d�rt;d�}||_|Sy)Nir�irD�VarStorerC)rrC�buildGDEFGlyphClassDef_�
GlyphClassDefr{�buildAttachListrtrQ�
AttachList�buildLigCaretListrurv�LigCaretList�buildGDEFMarkAttachClassDef_�MarkAttachClassDef�buildGDEFMarkGlyphSetsDef_�MarkGlyphSetsDefrrR�finishr��optimize�remap_device_varidxesr2r�r��clearr�r.r)r�r��store�
varidx_mapr�s     r4r�zBuilder.buildGDEF�s{���}�}���!�9�9�;����-�-�d�.@�.@�$�-�-�P����1�1�� � �$�"6�"6��
�
�
���#'�"C�"C�"E��� $� ?� ?� A���%)�%:�%:�z�
�������(�(�/�/�1�E��)��� %��
�"�^�^�-�
��*�*�:�6��T�Y�Y�&��I�I�f�%�+�+�A�A�*�M����"�"�$���"�"�����!�!��'�'��%�%�
�
��T�:�
&��f�%�F��F�L��M�r6c���|jr3|jj�D���cic]\}\}}||��
}}}}n�i}|jD]!}|j|j	���#|j
jj�D]-}|jD]}|j�D]}d||<�	��/|rtj�}	||	_|	Sycc}}}w)Nrs)
rwr�r`r��inferGlyphClassesrN�markClassesrx�definitions�glyphSetrr��	classDefs)
r�r�r��_�classesr��	markClass�markClassDefr�r�s
          r4r�zBuilder.buildGDEFGlyphClassDef_s������/3�/C�/C�/I�/I�/K�L�L���F�Q��q�!�t�L�G�L��G��-�-�
;�����v�7�7�9�:�
;�!�^�^�7�7�>�>�@�
+�	�$-�$9�$9�+�L�!-�!6�!6�!8�+��)*����+�+�
+���+�+�-�F�&�F���M���Ms�C&c��|jj�D���cic]\}\}}||��
}}}}|sytj�}||_|Scc}}}wr>)rxr�rr�r�)r�r�r�r�r�r�s      r4r�z$Builder.buildGDEFMarkAttachClassDef_+sZ��+/�+;�+;�+A�+A�+C�D�D�i�a��!�Q�Q��T�D�	�D����,�,�.��$����
��Es�Ac���g}t|jj�d���D]\}}|j|��t	j
||j�S)Nc��|dS)Nr��)�items r4�<lambda>z4Builder.buildGDEFMarkGlyphSetsDef_.<locals>.<lambda>6s
��4��7�r6r�)r�rzr�r�r{�buildMarkGlyphSetsDefrQ)r��sets�glyphs�id_s    r4r�z"Builder.buildGDEFMarkGlyphSetsDef_3s[����!�� � �&�&�(�.B�
�	 �K�F�C�
�K�K���	 ��(�(��t�}�}�=�=r6c���d|jvr,td�|jd<i|jd_|j|jdjt<y)N�Debg)r2rrUrar
�r�s r4r�zBuilder.buildDebg;sR������"� (�� 0�D�I�I�f��%'�D�I�I�f��"�8<�8M�8M��	�	�&����4�5r6c���|dvsJ|��|jD]	}d|_�g}|jD]�}|j|k7r�t|�|_t	t|j�|j|�d��|j|t|j�<|j|���g}|D]"}	|j|j���$|S#t$r%}tt|�|j�|�d}~wt$rJ}|j|t|j�j}tt|�|�|�d}~wwxYw)Nr�)r�r8r�)r`�lookup_indexr�r�r	�strr��get_lookup_name_rar�r1r$r�	Exception)r�r@r�r��	otLookups�l�er�s        r4�
buildLookups_zBuilder.buildLookups_AsV���&�&�+��+�&��m�m�	'�F�"&�F��	'����m�m�		#�F��|�|�s�"��"%�g�,�F��CR��V�_�_�-��*�*�6�2��D�D�!�!�#�&�s�6�+>�+>�'?�@�

�N�N�6�"�		#��	��	?�A�
?�� � �����+�	?����$�
A�%�c�!�f�a�j�j�9�q�@���
?��0�0��5�c�!�.�.�6I�J�S�S��%�c�!�f�h�7�Q�>��
?�s%�C&�&	E%�/ D�E%�AE � E%c�0�tt|d��}d|_tj�|_g|j_tj
�|_g|j
_tj�|_|j|�|j_	i}i}i}d�}t|jj�|��D�]�\}}|\}	}
}t|D�cgc]}|j��|j��c}�}
|dk(xr|dk(}|j||�}t!|
�dk(r|s|s�n|
D]G}	|j"|t%|�j'|��|j"|t%|�<�I||
f}|j/|�}|��t!|j
j�}tj�}||_tj2�|_|j5|�|j2_t9|
�|j2_t!|
�|j2_|j
jj?|�|||<|jA|	i�jA|
g�j?|�|jBj/|	|
f�|k(s���|||	|
f<���t|j��D�]�\}	}tj�}|	|_"tjF�|_#d|jF_$g|jF_%t|j��D�]\}
}tjJ�}tjL�|_&d|jL_'|j/|	|
f�}|�d	|jL_(n||jL_(|D�cgc]
}||k7s�	|��c}|jL_)t!|jLjR�|jL_*|
d
k(r|jL|jF_$��|
|_+|jFjJj?|���t!|jFjJ�|jF_,|jjj?|����t!|jj�|j_-t!|j
j�|j
_*t!|jj�|j_|Scc}w#t($rt+j,d�Y��FwxYwcc}w)Nr�c�8�|dd|dd|dd|dfS)Nrr'r�r�)�fs r4r�z#Builder.makeTable.<locals>.<lambda>ls+��A�a�D��G�Q�q�T�!�W�a��d�1�g�q��t�#D�r6r�rDr�r)r�zWfeaLib.Builder subclass needs upgrading to stash debug information. See fonttools#2065.i���dflt).�getattrrrr��ScriptRecordr��
FeatureRecordr�r��Lookupr�rbr��tupler��any_feature_variationsr�rar��_replace�KeyErrorr�r�r��
FeatureTag�Featurer�
FeatureParamsrm�LookupListIndexr�r�r�rc�	ScriptTag�Script�DefaultLangSys�
LangSysRecord�LangSys�LookupOrder�ReqFeatureIndex�FeatureIndexr��
LangSysTag�LangSysCountr�)r�r@r��feature_indices�required_feature_indicesr��sortFeatureTagr�r�r�r��feature_tagr��lookup_indices�size_feature�
force_feature�ix�feature_key�
feature_index�frec�
lang_features�srec�langrec�req_feature_indexr�s                         r4r�zBuilder.makeTable[s���,���#�t�,�.��"��
�#�.�.�0���(*����%�$�0�0�2���*,����'�#�.�.�0���"&�"4�"4�S�"9�������#%� ���E��"�4�>�>�#7�#7�#9�~�N�'	I�L�C��(+�%�F�D�+�#�)0�O�A�A�N�N�4N����O��N��&�=�B�[�F�-B�L� �7�7��S�I�M��>�"�a�'��]��$�	
���:>�:O�:O�PS�:T��B��;��h�s�h�+��)�)�#�.�s�2�w�7�	
�'��7�K�+�/�/��<�M��$� #�E�$5�$5�$C�$C� D�
��-�-�/��"-���'�/�/�1���-1�-D�-D�[�-Q����*�/3�N�/C����,�+.�~�+>����(��!�!�/�/�6�6�t�<�/<���,����v�r�*�5�5�d�B�?�F�F�}�U��&�&�*�*�F�D�>�:�k�I�;H�(�&�$��8�O'	I�T&,�G�M�M�O�%<�	7�!�F�M��(�(�*�D�#�D�N�"�/�/�+�D�K�)-�D�K�K�&�(*�D�K�K�%�)/�
�0C�0C�0E�)F�
>�%��o�"�0�0�2��"*�"2�"2�"4���.2����+�$<�$@�$@�&�$��$P�!�$�,�6<�G�O�O�3�6G�G�O�O�3� /�0��!�7H�2H�A�0����,�03�7�?�?�3O�3O�/P����,��6�>�18���D�K�K�.�)-�G�&��K�K�-�-�4�4�W�=�)
>�*(+�4�;�;�+D�+D�'E�D�K�K�$����)�)�0�0��6�9	7�<(+�5�+;�+;�+H�+H�'I����$�),�U�->�->�-L�-L�)M����&�'*�5�+;�+;�+B�+B�'C����$����KP�� ���M�M�G����P0s+�/U)
�U)
�
AU.�(
V�3V�.V�Vc���i}d}|jj�D]�\\}}}}g||<|j�D]n\}}	|j|}
g}|	D]=}|j|k7r�|j�J�|j|j�d}�?||j|
|f��p��|r1|j�D]\}}
t
|j||
|��yy)NFT)rdr�rr�r�r�r'r2)r�r��	table_tag�feature_vars�has_any_variationsr�r�
variations�conditionset�builders�raw_conditionset�indices�b�conditions_and_lookupss              r4r�zBuilder.makeFeatureVariations�s����"��/3�/G�/G�/M�/M�/O�	N�+��Q��;��(*�L��%�*4�*:�*:�*<�	
N�&��h�#'�#6�#6�|�#D� ���!�.�A��w�w�)�+� ��>�>�5�5�5��N�N�1�>�>�2�)-�&�.��[�)�0�0�2B�G�1L�M�	
N�	N��7C�7I�7I�7K�
�3��3�'��I�I�u�&<�k��
�r6c���|jj�D]>\\}}}}||k7r�|j�D]\}}t�fd�|D��s�y�@y)Nc3�<�K�|]}|j�k(���y�wr>)r�)r?r+r#s  �r4rAz1Builder.any_feature_variations.<locals>.<genexpr>�s�����>��q�w�w�)�+�>�s�TF)rdr�r�)r�rr#r�r�r&r'r(s  `     r4rzBuilder.any_feature_variations�sj���+/�+C�+C�+I�+I�+K�	 �'�O�Q��7�Z��+�%��*4�*:�*:�*<�
 �&��h��>�X�>�>��
 �	 �r6c�|�|jj�D��cic]\}}||��
}}}||vr||Sycc}}wr>)r\r�)r�r��k�v�revs     r4r�zBuilder.get_lookup_name_�sE�� $� 3� 3� 9� 9� ;�<���1�q�!�t�<��<��S�=��v�;����=s�
8c�H�|dk(r|dk(r|jrtd|��|dk(r|jrtd|��d|_||f|jvr/td|j��d|j��d�|��|jj	||f�y)	N�DFLTr�z_If "languagesystem DFLT dflt" is present, it must be the first of the languagesystem statementszRlanguagesystems using the "DFLT" script tag must precede all other languagesystemsTz"languagesystem � z" has already been specified)rVrr[�strip�add)r�r�r��languages    r4�add_language_systemzBuilder.add_language_system�s����V���F� 2�t�7U�7U�!�=���
�
�V���)�)�%�8����*.�D�&��H���!?�!?�?�!��<�<�>�8�>�>�#3�5���
�
	
�&�&�*�*�F�H�+=�>r6c�\�|jrt|j�Stdh�S)N)r4r�)rVr�r�s r4�get_default_language_systems_z%Builder.get_default_language_systems_�s-���)�)��T�;�;�<�<��.�/�0�0r6c��|j�|_d|_d|_||_d|_d|_|dk(r||_yy)Nr4rr�)r;rZrWr]r_rXrYrf�r�r�r8s   r4r�zBuilder.start_featuresN�� $� B� B� D���������!%������)-��&��6�>�"*�D��r6c�f�|j�J�d|_d|_d|_d|_d|_yr-)r_rZr]rXrYr�s r4r�zBuilder.end_features<���%�%�1�1�1�!%��� $���������)-��&r6c���||jvrtd|z|��|jdk(rtd|��||_d|j|<d|_|j�d|_d|_yy)Nz$Lookup "%s" has already been definedr�zpLookup blocks cannot be placed inside 'aalt' features; move it out, and then refer to it with a lookup statementr)r\rr_r^r]rXrYr=s   r4�start_lookup_blockzBuilder.start_lookup_blocks����4�&�&�&�!�6��=�x��
��!�!�V�+�!�L���
�
!%���$(����D�!�����!�!�)� �D��-1�D�*�*r6c�r�|j�J�d|_d|_|j�d|_d|_yyr-)r^r]r_rXrYr�s r4�end_lookup_blockzBuilder.end_lookup_block(sE���$�$�0�0�0� $�������!�!�)� �D��-1�D�*�*r6c��||jvsJ|��d|_|j|}|�|j||j�yyr>)r\r]r�r_)r��lookup_namer�s   r4�add_lookup_callzBuilder.add_lookup_call0sT���d�1�1�1�>�;�>�1�����$�$�[�1�����'�'���0F�0F�G�r6c��||_yr>)rp)r�r��revisions   r4�set_font_revisionzBuilder.set_font_revision7s
��%��r6c	���t|�dk(sJ�|jdvrtd|jz|��|j�td|��d|_|j||jf}|j
j
|dd|df�}|dk(s|r|r|dd|j
|<ng|j
|<t|j|fg�|_|r�|j|f}||jvrWtd|j��d	|jj��d
|j|j��d�|��|j|j|<yy)Nr��r�r�z7Language statements are not allowed within "feature %s"zCLanguage statements are not allowed within standalone lookup blocksrr�r'z	Language z	 (script z ) has already specified feature z as its required feature)r�r_rr]rWrbr�r�rZrcr6)r�r�r8�include_default�requiredr�r�s       r4�set_languagezBuilder.set_language:sw���8�}��!�!�!��!�!�%5�5�!�&�(,�(>�(>�?���
�
�!�!�)�!�2���
�
 ����|�|�X�t�'=�'=�>���.�.�$�$�c�!�f�f�c�!�f�%=�>�����/�w�")�!�*�D�N�N�3��"$�D�N�N�3�� )�D�L�L�(�+C�*D� E�����<�<��*�C��d�-�-�-�%�!���(����*�*�,��/�/��4�:�:�<���	�	�,0�+A�+A�D�#�#�C�(�r6c�<�t|�}|jj|�}|�|St|j�dz}||j|<|D]E}||jvr$|j|\}}td|�d|��|��||f|j|<�G|S)Nr��Glyph z3 already has been assigned a MarkAttachmentType at )r�ryr�r�rxr)r�r�r�r�r�r��locs       r4�getMarkAttachClass_zBuilder.getMarkAttachClass_as����6�"���%�%�)�)�&�1���?��J��$�)�)�*�Q�.��*-�����'��	6�E���(�(�(��)�)�%�0���3�%�49�3�@����
(+�H�o�D���U�#�	6��
r6c��t|�}|jj|�}|�|St|j�}||j|<|Sr>)r�rzr�r�)r�r�r�r�s    r4�getMarkFilterSet_zBuilder.getMarkFilterSet_ssQ���6�"���"�"�&�&�v�.���?��J��$�&�&�'��'*����V�$��
r6c��|dz}|r|j||�}||dzz}|r&|j||�}|dz}||_||_yd|_||_y)N�r�r�)rQrSrYrX)r�r�r[�
markAttach�
markFilter�markAttachClassr�s       r4�set_lookup_flagzBuilder.set_lookup_flag|sq�������"�6�6�x��L�O��_��1�2�E�� �2�2�8�Z�H�M��D�L�E�-:�D�*�!���.2�D�*� ��r6c�
�|jdvrtd|jz|��|j�td|��|j|dfhk(ryd|_||_d|_d|_|j|ddd��y)	NrJz5Script statements are not allowed within "feature %s"zAScript statements are not allowed within standalone lookup blocksr�rTF)rKrL)r_rrZr]rWrXrYrM)r�r�r�s   r4�
set_scriptzBuilder.set_script�s����!�!�%5�5�!�&�(,�(>�(>�?���
�
�!�!�)�!�V���
�� � �f�f�%5�$6�6�����������)-��&����(�F�D�5��Qr6c	���g}|D]X}|�C|j|D�cgc]'}|jj|j���)c}��H|jd��Z|Scc}w)z�Helper for building chain contextual substitutions

        Given a list of lookup names, finds the LookupBuilder for each name.
        If an input name is None, it gets mapped to a None LookupBuilder.
        N)r�r\r�r8)r�r��lookup_buildersr�r�s     r4�find_lookup_builders_zBuilder.find_lookup_builders_�sm����!�	-�J��%��&�&�>H�I��T�(�(�,�,�Q�V�V�4�I�� �&�&�t�,�
	-����	Js�,A"
c�x�|D]5}|jj|t��j|��7yr>)rtr�rUr�)r�r�r��
contourPointsr�s     r4�add_attach_pointszBuilder.add_attach_points�s6���	N�E����)�)�%���7�>�>�}�M�	Nr6c�t�|jdk7rtd|��|jj||f�y)Nr�z9Feature references are only allowed inside "feature aalt")r_rrer�)r�r��featureNames   r4�add_feature_referencezBuilder.add_feature_reference�s=���!�!�V�+�!�K�X��
�	
���"�"�H�k�#:�;r6c�:�|jj|�yr>)rhr7�r�r@s  r4�add_featureNamezBuilder.add_featureName�s�������s�#r6c�:�|jj|�yr>)rjr7rfs  r4�add_cv_parameterzBuilder.add_cv_parameter�s��������$r6c�n�||jvr|j|xxdz
cc<yd|j|<y)zbAdds new items to ``self.cv_num_named_params_``
        or increments the count of existing items.r�N)rlrfs  r4�add_to_cv_num_named_paramsz"Builder.add_to_cv_num_named_params�s8���$�+�+�+��%�%�c�*�a�/�*�-.�D�%�%�c�*r6c�@�|j|j|�yr>)rnr�)r��	characterr@s   r4�add_cv_characterzBuilder.add_cv_character�s�����C� �'�'�	�2r6c�.�|r
||f|_y||f|_yr>)rsrr)r�r�r��verticals    r4�
set_base_axiszBuilder.set_base_axis�s���$)�7�#3�D� �%*�G�$4�D�!r6c���|jdk7rtd|jz|��||||g|_|jD]0\}}|||jf}|jj|g��2y)Nr�z9Parameters statements are not allowed within "feature %s")r_rrorZrbr�)	r�r�rrrrr�r�r�s	         r4�set_size_parameterszBuilder.set_size_parameters�s����!�!�V�+�!�&�(,�(>�(>�?���
�
",�[�*�h� O��� �1�1�	/�L�F�D��4��!7�!7�8�C��N�N�%�%�c�2�.�	/r6c� �|jdk(rN|j�D]:\}}|jj|t	��}|j|��<y|s|s|r|j
||||�y|j|t�}	|j�D]m\}}||	jvrK||	j|k(rtjd|||�n td|�d|	j|�d�|��||	j|<�oy)Nr�zDRemoving duplicate single substitution from glyph "%s" to "%s" at %sz*Already defined rule for replacing glyph "z" by "�")
r_r�rgr�rUr7�add_single_subst_chained_r�rr��log�infor)
r�r��prefix�suffixr��
forceChain�
from_glyph�to_glyphr�r�s
          r4�add_single_substzBuilder.add_single_subst�s
���!�!�V�+�(/�
�
��
#�$�
�H��,�,�7�7�
�C�E�J������"�
#�
��V�z��*�*�8�V�V�W�M���!�!�(�,>�?��$+�M�M�O�	2� �J���V�^�^�+��v�~�~�j�9�9��H�H�.�"� � ��*�%�v�~�~�j�'A�C� ���
*2�F�N�N�:�&�!	2r6c���|s|s|rf|j|t�}|j|t�}||j|<|j
j
t||hg||g��y|j|t�}	||	jvrA||	j|k(r tjd|||rd|��nd�ntd|z|��||	j|<y)Nz@Removing duplicate multiple substitution from glyph "%s" to %s%sz at r�z+Already defined substitution for glyph "%s")r�rr�rr��rulesr�r#rwrxr)
r�r�ryr�rz�replacementsr{�chain�subr�s
          r4�add_multiple_substzBuilder.add_multiple_subst�s����V�z��$�$�X�/G�H�E��*�*�8�5I�J�C�!-�C�K�K����K�K���2�6�U�G�9�f�s�e�T�U���!�!�(�,@�A���F�N�N�"��v�~�~�e�4�4����$�� �)1�d�8�*�%�r��&�A�E�I�8���!-����u�r6c���|jdk(r6|jj|t��}|j	|�y|s|rW|j|t�}|j|t�}|jjt||hg||g��n|j|t�}||jvrtd|z|��||j|<y)Nr�z)Already defined alternates for glyph "%s")r_rgr�rUr�r�rr�rr�r�r#r�r)	r�r�ryr�rz�replacementr�r�r�s	         r4�add_alternate_substzBuilder.add_alternate_substs����!�!�V�+��(�(�3�3�E�3�5�A�D��K�K��$���V��$�$�X�/G�H�E��-�-�h�8M�N�F��K�K���2�6�U�G�9�f�v�h�W�X��%�%�h�0E�F�F��F�%�%�%�!�;�e�C�X��
�$/����%� r6c�r�|s|s|rU|j|t�}|j|t�}|jjt
||||g��n|j|t�}t|�std|��ttj|��D]}	||j|	<�y�Nz!Empty glyph class in substitution)
r�rr�rr�r�r#�allrr��	itertools�product�	ligatures)
r�r�ryr�rzr�r{r�r�r�s
          r4�add_ligature_substzBuilder.add_ligature_subst+s����V�z��$�$�X�/G�H�E��-�-�h�8L�M�F��K�K���2�6�6�6�F�8�T�U��%�%�h�0D�E�F��6�{�!�"E�x�P�P��	�)�)�6�2�3�	.�A�"-�F���Q��	.r6c
��t|�rt|�rt|�std|��|j|t�}|jjt
||||j|���y�Nz,Empty glyph class in contextual substitution)r�rr�rr�r�r#r^�r�r�ryr�rzr�r�s       r4�add_chain_context_substzBuilder.add_chain_context_substAsj���6�{�#�f�+�S��[�!�>���
��!�!�(�,D�E������������(B�(B�7�(K�
�	
r6c	��|rt|�rt|�std|��|j|t�}|j	|�}|�|j|t�}|jj|�|jjt|t|j��g||g��yr�)r�rr�r�find_chainable_single_substr�rr�r�r�r�r#rm�keys)r�r�ryrzr�r�r�s       r4rvz!Builder.add_single_subst_chained_Ms����c�&�k��V��!�>���
�
� � ��+C�D���/�/��8���;��*�*�8�5G�H�C������7�#�
��������g�l�l�n�)=�(>����N�	
r6c��|std|��|j|t�}|jj	|||f�yr�)rr�rr�r�)r�r��
old_prefix�
old_suffixr�r�s      r4�add_reverse_chain_single_substz&Builder.add_reverse_chain_single_subst^s?���!�"E�x�P�P��!�!�(�,J�K�������Z��W�=�>r6c�V�|s|s|r|j||||�y|j|t�}|D]B\}}|std|��|j	||d��}	|D]}
	|j||
|	���Dy#t$r%}tt|�|j�|�d}~wwxYw)N�%Empty glyph class in positioning ruleF��pairPosContext)	�add_single_pos_chained_r�r"r�makeOpenTypeValueRecord�add_posr$r�r�)r�r�ryrz�posr{r�r�r[�
otValueRecordr�r�s            r4�add_single_poszBuilder.add_single_posgs����V�z��(�(��6�6�3�G��%�%�h�0@�A�F�!$�
I�
����)�?����!%� <� <��e�E�!=�!�
�$�I�E�I����x��
�F�I�
I��,�I�-�c�!�f�a�j�j�A�q�H��I�s�"A:�:	B(� B#�#B(c���|r|std|��|j|t�}|j||d��}|j||d��}|j	|||||�y�Nr�Tr�)rr�r!r��addClassPair)	r�r��glyphclass1�value1�glyphclass2�value2r��v1�v2s	         r4�add_class_pair_poszBuilder.add_class_pair_pos{sk���+�!�"I�8�T�T��!�!�(�N�;��
�
)�
)�(�F�4�
)�
P��
�
)�
)�(�F�4�
)�
P�����H�k�2�{�B�Gr6c���|r|std|��|j|t�}|j||d��}|j||d��}|j	|||||�yr�)rr�r!r��addGlyphPair)	r�r��glyph1r��glyph2r�r�r�r�s	         r4�add_specific_pair_poszBuilder.add_specific_pair_pos�sk���V�!�"I�8�T�T��!�!�(�N�;��
�
)�
)�(�F�4�
)�
P��
�
)�
)�(�F�4�
)�
P�����H�f�b�&�"�=r6c	��|std|��|j|t�}|j|||j	||�|j	||��y�Nr�)rr�r�add_attachment�makeOpenTypeAnchor)r�r��
glyphclass�entryAnchor�
exitAnchorr�s      r4�add_cursive_poszBuilder.add_cursive_pos�sZ���!�"I�8�T�T��!�!�(�,=�>��������#�#�H�k�:��#�#�H�j�9�		
r6c�
�|j|t�}|j|||�|std|��|D]G\}}|j	||�}|D]+}||j
j
|i�|j<�-�Iyr�)r�r�
add_marks_rr�r�r�r8)	r�r�r��marksr�
baseAnchorr��otBaseAnchorr�s	         r4�add_mark_base_poszBuilder.add_mark_base_pos�s����"�"�8�-?�@������'�5�1��!�"I�8�T�T�%*�	R�!�J�	��2�2�8�Z�H�L��
R��EQ��
�
�(�(��r�2�9�>�>�B�
R�	Rr6c�(�|j|t�}g}|std|��|D]Q}i}|j|||�|D]$\}}	|j	||�||	j
<�&|j
|��S|D]}
||j|
<�yr�)r�rrr�r�r8r�r�)r�r�r��
componentsr�componentAnchorsr��anchors�	ligAnchorr�r�s           r4�add_mark_lig_poszBuilder.add_mark_lig_pos�s����"�"�8�->�?�����!�"I�8�T�T��	-�E��G��O�O�H�g�u�5�(-�
W�$�	�9�*.�*A�*A�(�I�*V��	���'�
W��#�#�G�,�	-��	8�E�'7�G���e�$�	8r6c�
�|j|t�}|j|||�|std|��|D]G\}}|j	||�}|D]+}||j
j
|i�|j<�-�Iyr�)r�rr�rr��	baseMarksr�r8)	r�r�r�r�rr�r�r��baseMarks	         r4�add_mark_mark_poszBuilder.add_mark_mark_pos�s����"�"�8�-?�@������'�5�1��!�"I�8�T�T�%*�	!�!�J�	��2�2�8�Z�H�L�%�
!��!��!�!�,�,�X�r�:��N�N��
!�	!r6c
��t|�rt|�rt|�std|��|j|t�}|jjt
||||j|���y)N�0Empty glyph class in contextual positioning rule)r�rr�rr�r�r#r^r�s       r4�add_chain_context_poszBuilder.add_chain_context_pos�sj���6�{�#�f�+�S��[�!�B�H��
��!�!�(�,B�C������������(B�(B�7�(K�
�	
r6c��|rt|�rt|�std|��|j|t�}g}|jD]\}}}}|j|��g}	|D]�\}
}|�|	j
d��|j||d��}|j||
|�}
|
�'|j|t�}
|j
|
�|
D]}|
j|||��|	j
|
���t|�t|	�k(s	J||	f��|jj
t||D��cgc]\}}|��	c}}||	��ycc}}w)Nr�Fr�)r�rr�rr�r�r�r��find_chainable_single_posr�r"r�r�r#)r�r�ryrzr�r��targetsr�r��subsr�r[�otValuer�r�r�r1s                 r4r�zBuilder.add_single_pos_chained_�se���#�f�+�S��[�!�B�H��
�� � ��+A�B���� %���	$��A�q�!�W��N�N�7�#�	$��� �
	�M�F�E��}����D�!���2�2��%��3��G��1�1�'�6�7�K�C��{��.�.�x�9I�J�����s�#��
6�����H�e�W�5�
6��K�K���
	��3�x�3�t�9�$�1�s�D�k�1�$�
�������s�(;�t�q�!��(;�V�T�J�	
��(;s�?Ec��|D]�\}}|jD]�}|jj�D]�}||jvrK|j	|tj|j��}|j|f|j|<�\|j|d}	|j|	k7s�~td|�d|	�d|j��|������y)z)Helper for add_mark_{base,liga,mark}_pos.rrOz cannot be in both @z and @N)
r�r�r�r�r��copy�deepcopy�anchorr8r)
r�r��
lookupBuilderr�r�r�r��mark�otMarkAnchor�existingMarkClasss
          r4r�zBuilder.add_marks_�s���!�	�L�A�y� )� 5� 5�
��(�/�/�8�8�:�
�D��=�#6�#6�6�'+�'>�'>�$�d�m�m�L�4G�4G�&H�(��6?�^�^�\�4R�
�+�+�D�1�,9�,?�,?��,E�a�,H�)�$�>�>�->�>�"1�#'�):�I�N�N�!L� (�#��
�
�	r6c�:�|jj|�yr>)r]�add_subtable_break)r�r�s  r4r�zBuilder.add_subtable_break�s�����+�+�H�5r6c��|jj|d�\}}|r||k7rtd|�d|��|��||f|j|<y)N�NNrOz& was assigned to a different class at )rwr�r)r�r�r��
glyphClass�oldClass�oldLocations      r4�setGlyphClass_zBuilder.setGlyphClass_�sZ�� $� 4� 4� 8� 8��� M���+���J�.�!��+�'���
�
(2�8�&<����U�#r6c���|D]}|j||d��|D]}|j||d��|D]}|j||d��|D]}|j||d��y)Nr�r'rsr�)r�)r�r��
baseGlyphs�ligatureGlyphs�
markGlyphs�componentGlyphsr�s       r4�add_glyphClassDefzBuilder.add_glyphClassDef	s��� �	4�E�����%��3�	4�#�	4�E�����%��3�	4��	4�E�����%��3�	4�$�	4�E�����%��3�	4r6c�N�|D] }||jvs�||j|<�"yr>)rv)r�r�r��caretsr�s     r4�add_ligatureCaretByIndex_z!Builder.add_ligatureCaretByIndex_s/���	5�E��D�0�0�0�.4��$�$�U�+�	5r6c�`�t|t�s|S|j||�\}}|�||fS|Sr>)rMr�makeVariablePos)r�r��caret�default�devices     r4�makeLigCaretzBuilder.makeLigCarets=���%��0��L��.�.�x��?�������V�$�$��r6c��|D�cgc]}|j||���}}|D] }||jvs�||j|<�"ycc}wr>)r�ru)r�r�r�r�r�r�s      r4�add_ligatureCaretByPos_zBuilder.add_ligatureCaretByPos_"sU��BH�I��$�#�#�H�e�4�I��I��	5�E��D�0�0�0�.4��$�$�U�+�	5��Js�Ac�D�|jj|||||g�yr>)rqr�)r�r�r�rrrrs       r4�add_name_recordzBuilder.add_name_record(s�������F�J�	�6�6�J�Kr6c�"�||j|<yr>)r{�r�r�r[s   r4�
add_os2_fieldzBuilder.add_os2_field+s����	�	�#�r6c�"�||j|<yr>)r|r�s   r4�add_hhea_fieldzBuilder.add_hhea_field.�����
�
�3�r6c�"�||j|<yr>)r}r�s   r4�add_vhea_fieldzBuilder.add_vhea_field1r�r6c�L��
�d|jvrtd|��|jD�cic]0}|j|j|j
|jf��2}}|j�D���cic]'\}\}}|t|||�t|||�f��)}}}}d|jvrP|jdj�
|j�D���	cic]\�}	�t��
fd�|	D����}}}	||j|<ycc}wcc}}}wcc}	}w)NrLz?Cannot add feature variations to a font without an 'fvar' table�avarc3�H�K�|]}��vrt|���n|���y�wr>)r))r?r1r�r�s  ��r4rAz+Builder.add_conditionset.<locals>.<genexpr>Os2�������=A�G�O�&�q�'�$�-�8�QR�R��s�")r2rrSrT�minValue�defaultValue�maxValuer�r(�segmentsrr)r�r�r�r[r��axisMapr@�bottom�top�condition_ranger�s    `     @r4�add_conditionsetzBuilder.add_conditionset4sI�������"�!�Q���
��	�	�
��
�L�L�4�=�=�$�*;�*;�T�]�]�K�K�
��
�',�k�k�m�
�
�
#��]�f�c�	
��v�w�s�|�4��s�G�C�L�1��
�
��
��T�Y�Y���i�i��'�0�0�G�.3�[�[�]���
*�D�/�	�e��,�����E��$)����C� ��5
��

��s�5D�6,D�! D c�>�|jstd|��|j|_|js|jdfS|j|j|j|jjd��\}}d}|�|dk7rt|�}||fS)Nz5Can't define a variable scalar in a non-variable fontr�l��)
rRrrS�	does_varyr��add_to_variation_storer�r2r�r&)r�r��	varscalarr�r�r�s      r4r�zBuilder.makeVariablePosXs����#�#�!�G���
����	���"�"��$�$�d�*�*�"�9�9�� � �$�"2�"2�D�I�I�M�M�&�4I�
���������*�!4�%�e�,�F����r6c�J�|�yd}d\}}|j�(tjt|j��}|j�(tjt|j��}dD]k}t||�}t
|t�s� t||dz��td|��|j||�\}}	t|||�|	��`|dk(r|	}n|	}d}�mtj|j|j|j||�}
|rd	|
_|
S)
zast.Anchor --> otTables.AnchorNFr�)�x�y�DeviceTable�4Can't define a device coordinate and variable scalarrTrs)�xDeviceTabler{�buildDevice�dict�yDeviceTabler�rMrrr�r/�buildAnchorrr�contourpointr	)r�r�r��variable�deviceX�deviceY�dimr
r�r��	otlanchors           r4r�zBuilder.makeOpenTypeAnchorls+���>����%�������*��o�o�d�6�+>�+>�&?�@�G����*��o�o�d�6�+>�+>�&?�@�G��	 �C����,�I��i��8���v�s�]�2�3�?�%�J�H���#�2�2�8�Y�G�O�G�V��F�C��)��!��#�:�$�G�$�G���	 �"�O�O��H�H�f�h�h�� 3� 3�W�g�
�	�� �I���r6�Reservedrr�c��|syi}|jj�D]�\}\}}t||d�}|s�|r"tjt|��||<�=t
|t�rZ|dddz}	|	dj�|	ddz}
t||
�rtd|��|j||�\||<}|���|||	<��|||<��|r|s|jrddinddi}tj|�}|S)	z&ast.ValueRecord --> otBase.ValueRecordNrr��Devicer�r�YAdvance�XAdvance)
�_VALUEREC_ATTRSr�r�r{rrrMr�lowerrr�rp�
buildValue)
r�r�r1r��vr�astName�otName�isDevice�val�otDeviceName�
feaDeviceNamer��valRecs
             r4r�zBuilder.makeOpenTypeValueRecord�s����
��+/�+?�+?�+E�+E�+G�	!�'�G�'�f�h��!�W�d�+�C���� �_�_�T�#�Y�7��6�
��C��0�%�a��{�X�5�� ,�Q�� 5� 5� 7�,�q�r�:J� J�
��1�m�,�)�N�PX���&*�%9�%9�(�C�%H�"��6�
�F��%�'-�B�|�$� ��6�
�#	!�&�"�$%�J�J�*�a��Z��O�B�����#���
r6�NF)F)]�__name__�
__module__�__qualname__r�r�r�r1r�r�r�r�r�r�r�r�rr�r�r]rgrpr�rRr�r�r�r�r�r�r�r�r�r�rr�r9r;r�r�r@rBrErHrMrQrSrYr[r^rardrgrirkrnrqrsr~r�r�r�r�rvr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	r�r�r�valueRecordFormat�
startswithr$r#r�)r?r�r8r)s0000r4r0r0]s8��� �
� ��O� H�T<�|�>�
 �60*�d	0�2�"
:�$�)�V�4RU�h(� 
4�?�$S
�j+4�Z
��8"�H�$�>�N��4]�~�.��?�2	1�+�.�2�$2�H�&�%B�N�$�!�R�*� N�<�$�%�/�3�5�/�"2�<IN�-�4/�&.�,

�
�"?�I�(H�>�	
�R�8�
!�

�
�<�&6�=�
4�5�
�5�L�� � �")�H�( �H%+�$<�$<��� �A�t�X�q����z�*�	
�Q��
�
��$�q�r�(�"�T�8�$4�4��O���
s�9E!
r0r.)NNF)I�fontTools.miscr�fontTools.misc.textToolsrrrr�fontTools.feaLib.errorr� fontTools.feaLib.lookupDebugInfor	r
r�fontTools.feaLib.parserr�fontTools.feaLib.astr
�fontTools.feaLib.variableScalarr�fontTools.otlLibrr{�fontTools.otlLib.maxContextCalcr�fontTools.ttLibrr�fontTools.ttLib.tablesrr�fontTools.otlLib.builderrrrrrrrrrrrr r!r"r#�fontTools.otlLib.errorr$�fontTools.varLib.varStorer%�fontTools.varLib.builderr&�fontTools.varLib.featureVarsr'�fontTools.varLib.modelsr(r)�collectionsr*r�r��ior+�loggingr�r��	getLoggerr/rwr5r;�objectr0r�r6r4�<module>rJs���"�E�E�2���
+�,�:�+�6�4�3������"4�;�5�@�F�#������	��g����!��.�&7<�G�2S�f�Sr6

Youez - 2016 - github.com/yon3zu
LinuXploit