§
    èƒñj! ã                  óò  — U d dl mZ d dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ e
rýd dl%m&Z&m'Z' d dl(m)Z)m*Z* d dl	m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{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ˆm‰Z‰mŠZŠm‹Z‹mŒZŒm�Z�mŽZŽm�Z�m�Z�m‘Z‘m’Z’m“Z“ d dl”m•Z•  edd¬¦  «        Z– ej—        e˜¦  «        Z™ edeš¬¦  «        Z› G d„ deœ¦  «        Z� G d„ deœ¦  «        ZždPd „ZŸi Z d!e¡d"<   	 dQdRd(„Z¢dSd)„Z£dTd+„Z¤dUd-„Z¥dVd/„Z¦dWd1„Z§dXd3„Z¨dYd4„Z©dZd6„ZªdYd7„Z«d[d8„Z¬g d9¢Z­g d:¢Z®	 dQd\d@„Z¯	 	 d]d^dG„Z°d_dJ„Z±d`dadO„Z²dS )bé    )ÚannotationsN)ÚBytesIOÚStringIOÚUnsupportedOperation)ÚTYPE_CHECKINGÚ	TypedDictÚTypeVarÚoverload)ÚConfig)Ú	xmlWriter)ÚAbstractConfig)ÚdeprecateArgument)ÚTagÚbyteordÚtostr)Ú
TTLibError)Ú
SFNTReaderÚ
SFNTWriter)Ú_TTGlyphÚ_TTGlyphSetÚ_TTGlyphSetCFFÚ_TTGlyphSetGlyfÚ_TTGlyphSetVARC)ÚMappingÚMutableMapping)Ú
ModuleTypeÚTracebackType)ÚAnyÚBinaryIOÚLiteralÚSequenceÚTextIO)ÚSelfÚUnpack)`ÚB_A_S_E_ÚC_B_D_T_ÚC_B_L_C_ÚC_F_F_ÚC_F_F__2ÚC_O_L_R_ÚC_P_A_L_ÚD_M_A_P_ÚD_S_I_G_ÚE_B_D_T_ÚE_B_L_C_ÚE_B_S_C_ÚF_F_T_M_ÚG_D_E_F_ÚG_L_Y_F_ÚG_P_O_S_ÚG_S_U_B_ÚG_V_A_R_ÚH_H_E_A_ÚH_M_T_X_ÚH_V_A_R_ÚI_F_T_ÚI_F_T_X_ÚJ_S_T_F_ÚL_T_S_H_ÚL_O_C_A_ÚM_A_T_H_ÚM_A_X_P_ÚM_V_A_R_ÚS_T_A_T_ÚS_V_G_ÚT_S_I__0ÚT_S_I__1ÚT_S_I__2ÚT_S_I__3ÚT_S_I__5ÚT_S_I_B_ÚT_S_I_C_ÚT_S_I_D_ÚT_S_I_J_ÚT_S_I_P_ÚT_S_I_S_ÚT_S_I_V_ÚT_T_F_A_ÚV_A_R_C_ÚV_D_M_X_ÚV_H_E_A_ÚV_M_T_X_ÚV_O_R_G_ÚV_V_A_R_ÚD__e_b_gÚF__e_a_tÚG__l_a_tÚG__l_o_cÚO_S_2f_2ÚS__i_l_fÚS__i_l_lÚ_a_n_k_rÚ_a_v_a_rÚ_b_d_a_tÚ_b_g_c_lÚ_b_h_e_dÚ_b_l_o_cÚ_b_s_l_nÚ_c_i_d_gÚ_c_m_a_pÚ_c_v_a_rÚ_c_v_tÚ_f_e_a_tÚ_f_p_g_mÚ_f_v_a_rÚ_g_a_s_pÚ_g_c_i_dÚ_g_l_y_fÚ_g_v_a_rÚ_h_d_m_xÚ_h_e_a_dÚ_h_h_e_aÚ_h_m_t_xÚ_k_e_r_nÚ_l_c_a_rÚ_l_o_c_aÚ_l_t_a_gÚ_m_a_x_pÚ_m_e_t_aÚ_m_o_r_tÚ_m_o_r_xÚ_n_a_m_eÚ_o_p_b_dÚ_p_o_s_tÚ_p_r_e_pÚ_p_r_o_pÚ_s_b_i_xÚ_t_r_a_kÚ_v_h_e_aÚ_v_m_t_x©ÚDefaultTableÚ_VT_coT)Ú	covariantÚ_NumberT)Úboundc                  óú  — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ddddd dd!ed"d!d#dddi d"f�d{d1„Z�d|d3„Z�d}d:„Z�d~d;„Z		 �d�d€d>„Z
	 �d��d‚dB„Z G dC„ dDe¦  «        Z	 �dƒ�d„dK„Z	 	 	 	 	 	 	 	 �d…�d†dU„Z	 	 �d‡�dˆdX„Z	 �d��d‰dY„Z�dŠdZ„Z�dŠd[„ZeZ�d‹d\„Z�d��dŒd^„Z�d�d_„Ze�dŽdb„¦   «         Ze�d�de„¦   «         Ze�d�dh„¦   «         Ze�d‘dk„¦   «         Ze�d’dn„¦   «         Ze�d“dq„¦   «         Ze�d”dt„¦   «         Ze�d•dw„¦   «         Ze�d–dz„¦   «         Ze�d—d}„¦   «         Ze�d˜d€„¦   «         Ze�d™dƒ„¦   «         Ze�dšd†„¦   «         Ze�d›d‰„¦   «         Ze�dœdŒ„¦   «         Ze�d�d�„¦   «         Ze�džd’„¦   «         Ze�dŸd•„¦   «         Ze�d d˜„¦   «         Ze�d¡d›„¦   «         Ze�d¢dž„¦   «         Ze�d£d¡„¦   «         Ze�d¤d¤„¦   «         Ze�d¥d§„¦   «         Ze�d¦dª„¦   «         Ze�d§d­„¦   «         Ze�d¨d°„¦   «         Ze�d©d³„¦   «         Ze�dªd¶„¦   «         Ze�d«d¹„¦   «         Ze�d¬d¼„¦   «         Ze�d­d¿„¦   «         Ze�d®dÂ„¦   «         Ze�d¯dÅ„¦   «         Ze�d°dÈ„¦   «         Ze�d±dË„¦   «         Ze�d²dÎ„¦   «         Ze�d³dÑ„¦   «         Ze�d´dÔ„¦   «         Ze�dµd×„¦   «         Ze�d¶dÚ„¦   «         Ze�d·dÝ„¦   «         Ze�d¸dà„¦   «         Ze�d¹dã„¦   «         Ze�dºdæ„¦   «         Ze�d»dé„¦   «         Ze�d¼dì„¦   «         Ze�d½dï„¦   «         Ze�d¾dò„¦   «         Ze�d¿dõ„¦   «         Ze�dÀdø„¦   «         Ze�dÁdû„¦   «         Ze�dÂdþ„¦   «         Ze�dÃ�d„¦   «         Ze�dÄ�d„¦   «         Ze�dÅ�d„¦   «         Ze�dÆ�d
„¦   «         Ze�dÇ�d„¦   «         Ze�dÈ�d„¦   «         Ze�dÉ�d„¦   «         Ze�dÊ�d„¦   «         Ze�dË�d„¦   «         Ze�dÌ�d„¦   «         Ze�dÍ�d„¦   «         Ze�dÎ�d"„¦   «         Ze�dÏ�d%„¦   «         Ze�dÐ�d(„¦   «         Ze�dÑ�d+„¦   «         Ze�dÒ�d.„¦   «         Ze�dÓ�d1„¦   «         Ze�dÔ�d4„¦   «         Ze�dÕ�d7„¦   «         Ze�dÖ�d:„¦   «         Ze�d×�d=„¦   «         Ze�dØ�d@„¦   «         Ze�dÙ�dC„¦   «         Ze�dÚ�dF„¦   «         Ze�dÛ�dI„¦   «         Ze�dÜ�dL„¦   «         Ze�dÝ�dO„¦   «         Ze�dÞ�dR„¦   «         Ze�dß�dU„¦   «         Ze�dà�dX„¦   «         Ze�dá�d[„¦   «         Ze�dâ�d^„¦   «         Ze�dã�da„¦   «         Ze�dä�dd„¦   «         Ze�då�dg„¦   «         Ze�dæ�dj„¦   «         Ze�dç�dm„¦   «         Ze�dè�dp„¦   «         Ze�dé�ds„¦   «         Ze�dê�dv„¦   «         Ze�dë�dy„¦   «         Ze�dì�d|„¦   «         Ze�dí�d„¦   «         Ze�dî�d‚„¦   «         Ze�dï�d„„¦   «         Z�dï�d…„Z�dð�dˆ„Z�dñ�dŠ„Z�dò�d‹„Ze�dó�d�„¦   «         Ze�dô�d�„¦   «         Ze�dõ�d‘„¦   «         Ze�dö�d“„¦   «         Ze�d÷�d•„¦   «         Ze�dø�d—„¦   «         Ze�dù�d™„¦   «         Ze�dú�d›„¦   «         Ze�dû�d�„¦   «         Ze�dü�dŸ„¦   «         Ze�dý�d¡„¦   «         Ze�dþ�d£„¦   «         Ze�dÿ�d¥„¦   «         Ze�d �d§„¦   «         Ze�d�d©„¦   «         Ze�d�d«„¦   «         Ze�d�d­„¦   «         Ze�d�d¯„¦   «         Ze�d�d±„¦   «         Ze�d�d³„¦   «         Ze�d�dµ„¦   «         Ze�d�d·„¦   «         Ze�d	�d¹„¦   «         Ze�d
�d»„¦   «         Ze�d�d½„¦   «         Ze�d�d¿„¦   «         Ze�d�dÁ„¦   «         Ze�d�dÃ„¦   «         Ze�d�dÅ„¦   «         Ze�d�dÇ„¦   «         Ze�d�dÉ„¦   «         Ze�d�dË„¦   «         Ze�d�dÍ„¦   «         Ze�d�dÏ„¦   «         Ze�d�dÑ„¦   «         Ze�d�dÓ„¦   «         Ze�d�dÕ„¦   «         Ze�d�d×„¦   «         Ze�d�dÙ„¦   «         Ze�d�dÛ„¦   «         Ze�d�dÝ„¦   «         Ze�d�dß„¦   «         Ze�d�dá„¦   «         Ze�d�dã„¦   «         Ze�d�då„¦   «         Ze�d �dç„¦   «         Ze�d!�dé„¦   «         Ze�d"�dë„¦   «         Ze�d#�dí„¦   «         Ze�d$�dï„¦   «         Ze�d%�dñ„¦   «         Ze�d&�dó„¦   «         Ze�d'�dõ„¦   «         Ze�d(�d÷„¦   «         Ze�d)�dù„¦   «         Ze�d*�dû„¦   «         Ze�d+�dý„¦   «         Ze�d,�dÿ„¦   «         Ze�d-�d„¦   «         Ze�d.�d„¦   «         Ze�d/�d„¦   «         Ze�d0�d„¦   «         Ze�d1�d	„¦   «         Ze�d2�d„¦   «         Ze�d3�d„¦   «         Ze�d4�d„¦   «         Ze�d5�d„¦   «         Ze�d6�d„¦   «         Ze�d7�d„¦   «         Ze�d8�d„¦   «         Ze�d9�d„¦   «         Ze�d:�d„¦   «         Ze�d;�d„¦   «         Ze�d<�d„¦   «         Ze�d=�d!„¦   «         Ze�d>�d#„¦   «         Ze�d?�d%„¦   «         Ze�d@�d'„¦   «         Ze�dA�d)„¦   «         Ze�dB�d+„¦   «         Ze�dC�d-„¦   «         Ze�dD�d/„¦   «         Ze�dE�d1„¦   «         Ze�dF�d3„¦   «         Ze�dG�d5„¦   «         Ze�dH�d7„¦   «         Ze�dI�d9„¦   «         Ze�dJ�d;„¦   «         Ze�dK�d=„¦   «         Ze�dL�d?„¦   «         Ze�dM�dA„¦   «         Ze�dN�dC„¦   «         Ze�dO�dE„¦   «         Ze�dî�dF„¦   «         Ze�dP�dH„¦   «         Ze�dQ�dL„¦   «         Z	 �d��dR�dM„Z�dS�dN„Z�d‹�dO„Z�dT�dP„Z �d��dQ„Z!�d~�dR„Z"e#�dU�dT„¦   «         Z$�d‹�dU„Z%�d‹�dV„Z&�dV�dX„Z'�dW�d[„Z(�dX�d]„Z)�dY�d`„Z*�dZ�d[�db„Z+�d\�dc„Z,	 �d��d]�dg„Z-�d^�di„Z.	 	 	 	 �d_�d`�dp„Z/�da�ds„Z0	 �db�dc�dx„Z1�dd�dz„Z2dS (e  ÚTTFonta_  Represents a TrueType font.

    The object manages file input and output, and offers a convenient way of
    accessing tables. Tables will be only decompiled when necessary, ie. when
    they're actually accessed. This means that simple operations can be extremely fast.

    Example usage:

    .. code-block:: pycon

        >>>
        >> from fontTools import ttLib
        >> tt = ttLib.TTFont("afont.ttf") # Load an existing font file
        >> tt['maxp'].numGlyphs
        242
        >> tt['OS/2'].achVendID
        'B&H '
        >> tt['head'].unitsPerEm
        2048

    For details of the objects returned when accessing each table, see the
    :doc:`tables </ttLib/tables>` documentation.
    To add a table to the font, use the :py:func:`newTable` function:

    .. code-block:: pycon

        >>>
        >> os2 = newTable("OS/2")
        >> os2.version = 4
        >> # set other attributes
        >> font["OS/2"] = os2

    TrueType fonts can also be serialized to and from XML format (see also the
    :doc:`ttx </ttx>` binary):

    .. code-block:: pycon

        >>
        >> tt.saveXML("afont.ttx")
        Dumping 'LTSH' table...
        Dumping 'OS/2' table...
        [...]

        >> tt2 = ttLib.TTFont() # Create a new font object
        >> tt2.importXML("afont.ttx")
        >> tt2['maxp'].numGlyphs
        242

    The TTFont object may be used as a context manager; this will cause the file
    reader to be closed after the context ``with`` block is exited::

            with TTFont(filename) as f:
                    # Do stuff

    Args:
            file: When reading a font from disk, either a pathname pointing to a file,
                    or a readable file object.
            res_name_or_index: If running on a Macintosh, either a sfnt resource name or
                    an sfnt resource index number. If the index number is zero, TTLib will
                    autodetect whether the file is a flat file or a suitcase. (If it is a suitcase,
                    only the first 'sfnt' resource will be read.)
            sfntVersion (str): When constructing a font object from scratch, sets the four-byte
                    sfnt magic number to be used. Defaults to ``   `` (TrueType). To create
                    an OpenType file, use ``OTTO``.
            flavor (str): Set this to ``woff`` when creating a WOFF file or ``woff2`` for a WOFF2
                    file.
            checkChecksums (int): How checksum data should be treated. Default is 0
                    (no checking). Set to 1 to check and warn on wrong checksums; set to 2 to
                    raise an exception if any wrong checksums are found.
            recalcBBoxes (bool): If true (the default), recalculates ``glyf``, ``CFF ``,
                    ``head`` bounding box values and ``hhea``/``vhea`` min/max values on save.
                    Also compiles the glyphs on importing, which saves memory consumption and
                    time.
            ignoreDecompileErrors (bool): If true, exceptions raised during table decompilation
                    will be ignored, and the binary data will be returned for those tables instead.
            recalcTimestamp (bool): If true (the default), sets the ``modified`` timestamp in
                    the ``head`` table on save.
            fontNumber (int): The index of the font in a TrueType Collection file.
            lazy (bool): If lazy is set to True, many data structures are loaded lazily, upon
                    access only. If it is set to False, many data structures are loaded immediately.
                    The default is ``lazy=None`` which is somewhere in between.
    z$dict[Tag, DefaultTable | GlyphOrder]ÚtableszSFNTReader | NoneÚreaderÚstrÚsfntVersionú
str | NoneÚflavorú
Any | NoneÚ
flavorDataúbool | NoneÚlazyÚboolÚrecalcBBoxesÚrecalcTimestampÚignoreDecompileErrorsr   Úcfgú	list[str]Ú
glyphOrderúdict[str, int]Ú_reverseGlyphOrderDictú6MutableMapping[tuple[Tag, bytes], DefaultTable] | NoneÚ_tableCacheÚdisassembleInstructionsÚbitmapGlyphDataFormatÚverboseÚquietNz   r   TFéÿÿÿÿÚfileú(str | os.PathLike[str] | BinaryIO | NoneÚres_name_or_indexústr | int | NoneÚcheckChecksumsÚintÚallowVIDr   Ú
fontNumberú"Mapping[str, Any] | AbstractConfigÚ_useLegacyTTCÚreturnÚNonec                óÆ  — dD ]F}t          ¦   «                              |¦  «        }|�t          |d¦  «         t          | ||¦  «         ŒG|| _        || _        |
| _        i | _        d | _        t          |t          ¦  «        r|                     ¦   «         nt          |¦  «        | _        |	| _        |s|| _        || _        d | _        d S d}t%          |d¦  «        s¥t          |t&          t(          j        f¦  «        st-          d¦  «        ‚d}|�`ddlm} |dk    r=|                     |¦  «        r|                     |d¦  «        }n¼t7          |d	¦  «        }n«|                     ||¦  «        }n”t7          |d	¦  «        }nƒt          |t&          t(          j        f¦  «        rJ ‚d
}t%          |d¦  «        r|                     ¦   «         }n9t%          |d¦  «        r)	 |                     d¦  «         n# t<          $ r d
}Y nw xY w| j        sm|r|                     d¦  «         t?          |                      ¦   «         ¦  «        }t%          |d¦  «        r|j!        |_!        |r| "                    ¦   «          |}n|stG          d¦  «        ‚|| _$        i }|rd|d<   tK          ||fd|i|¤Ž| _        | j        j        | _        | j        j        | _        | j        j        | _        d S )N)r¤   r¥   úconfigure logging insteadTÚreadz\fileOrPath must be a file path (str or PathLike) if it isn't an object with a `read` method.é   )ÚmacUtilsr   ÚrbFÚseekableÚseekÚnamez*Input file must be seekable when lazy=Truer°   r®   )&ÚlocalsÚgetr   Úsetattrr–   r˜   r™   r�   rŽ   Ú
isinstancer   Úcopyr   r›   rš   r�   r’   r”   Úhasattrr�   ÚosÚPathLikeÚ	TypeErrorÚ r·   ÚgetSFNTResIndicesÚSFNTResourceReaderÚopenr¹   rº   r   r   rµ   r»   Úcloser   r¡   r   )Úselfr§   r©   r�   r’   r«   r¤   r˜   r­   rš   r™   r®   r–   r¥   r¡   r›   r°   r»   Úvalr¹   ÚcloseStreamr·   ÚtmpÚreaderOptionss                           úU/data/share/cad/hardware/.venv/lib/python3.11/site-packages/fontTools/ttLib/ttFont.pyÚ__init__zTTFont.__init__ò   s1  € ð( )ð 	%ð 	%ˆDÝ‘(”(—,’,˜tÑ$Ô$ˆCØˆÝ! $Ð(CÑDÔDÐDÝ�D˜$ Ñ$Ô$Ð$Ð$àˆŒ	Ø(ˆÔØ.ˆÔØˆŒØˆŒÝ!+¨CµÑ!@Ô!@ÐQ�3—8’8‘:”:�:ÅfÈSÁkÄkˆŒØ%:ˆÔ"àð 	Ø*ˆDÔØ ˆDŒKØ"ˆDŒOØˆFØˆÝ�t˜VÑ$Ô$ð "	%Ý˜d¥S­"¬+Ð$6Ñ7Ô7ð ÝØrñô ð ð ˆKà Ð,à&Ð&Ð&Ð&Ð&Ð&à$¨Ò)Ð)Ø×1Ò1°$Ñ7Ô7ð 0à'×:Ò:¸4ÀÑCÔC˜˜å# D¨$Ñ/Ô/˜˜à#×6Ò6°tÐ=NÑOÔO�D�Då˜D $Ñ'Ô'��õ " $­­b¬kÐ(:Ñ;Ô;Ð;Ð;Ð;ØˆKõ �t˜ZÑ(Ô(ð %ØŸ=š=™?œ?��Ý˜˜vÑ&Ô&ð %ð%Ø—I’I˜a‘L”L�L�LøÝ+ð %ð %ð %Ø$�H�H�Hð%øøøð Œyð 	Kàð Ø—	’	˜!‘”�Ý˜$Ÿ)š)™+œ+Ñ&Ô&ˆCÝ�t˜VÑ$Ô$ð %àœ9�”Øð Ø—
’
‘”�ØˆDˆDØð 	KÝÐIÑJÔJÐJØ&ˆÔØˆØð 	2Ø-1ˆM˜/Ñ*Ý Ø�.ð
ð 
Ø-7ð
Ø;Hð
ð 
ˆŒð  œ;Ô2ˆÔØ”kÔ(ˆŒØœ+Ô0ˆŒˆˆs   ÇG2 Ç2HÈ Hr#   c                ó   — | S ©N© ©rÊ   s    rÏ   Ú	__enter__zTTFont.__enter__V  s   € Øˆó    Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackúTracebackType | Nonec                ó.   — |                       ¦   «          d S rÒ   )rÉ   )rÊ   r×   rÙ   rÛ   s       rÏ   Ú__exit__zTTFont.__exit__Y  s   € ð 	�
Š
‰ŒˆˆˆrÖ   c                óX   — | j         �"| j                              ¦   «          d| _         dS dS )z+If we still have a reader object, close it.N)rŽ   rÉ   rÔ   s    rÏ   rÉ   zTTFont.closea  s1   € àŒ;Ð"ØŒK×ÒÑÔÐØˆDŒKˆKˆKð #Ð"rÖ   ú!str | os.PathLike[str] | BinaryIOÚreorderTablesc                ó¨  — t          |d¦  «        s.| j        r$| j        j        j        |k    rt          d¦  «        ‚d}nd}t          ¦   «         }|                      |¦  «        }|�™|s—|du r| j        �Œ|du r=| j        €t          d¦  «        ‚t          | j         	                    ¦   «         ¦  «        }nd}| 
                    ¦   «          t          ¦   «         }t          |||¦  «         |                     ¦   «          |}|rst          |t          t          j        f¦  «        sJ ‚t#          |d¦  «        5 }|                     |                     ¦   «         ¦  «         ddd¦  «         n# 1 swxY w Y   nJt          |t          t          j        f¦  «        rJ ‚|                     |                     ¦   «         ¦  «         |                     ¦   «          dS )añ  Save the font to disk.

        Args:
                file: Similarly to the constructor, can be either a pathname or a writable
                        binary file object.
                reorderTables (Option[bool]): If true (the default), reorder the tables,
                        sorting them by tag (recommended by the OpenType specification). If
                        false, retain the original font order. If None, reorder by table
                        dependency (fastest).
        Úwritez4Can't overwrite TTFont when 'lazy' attribute is TrueTFNzSThe original table order is unavailable because there isn't a font to read it from.Úwb)rÁ   r–   rŽ   r§   r»   r   r   Ú_saveÚlistÚkeysÚflushÚreorderFontTablesrÉ   r¿   r�   rÂ   rÃ   rÈ   rã   Úgetvalue)rÊ   r§   rá   ÚcreateStreamrÍ   Úwriter_reordersTablesÚ
tableOrderÚtmp2s           rÏ   ÚsavezTTFont.saveg  sÿ  € õ �t˜WÑ%Ô%ð 	!ØŒyð Y˜Tœ[Ô-Ô2°dÒ:Ð:Ý Ð!WÑXÔXÐXØˆLˆLð !ˆLå‰iŒiˆà $§
¢
¨3¡¤Ðð Ð!Ø$ð "à Ð&Ð&¨4¬;Ð+>à Ð%Ð%à”;Ð&Ý$Ømñô ð õ " $¤+×"2Ò"2Ñ"4Ô"4Ñ5Ô5�
�
ð "�
Ø�IŠI‰KŒKˆKÝ‘9”9ˆDÝ˜c 4¨Ñ4Ô4Ð4Ø�IŠI‰KŒKˆKØˆCàð 	'å˜d¥S­"¬+Ð$6Ñ7Ô7Ð7Ð7Ð7Ý�d˜DÑ!Ô!ð + TØ—
’
˜3Ÿ<š<™>œ>Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +øõ " $­­b¬kÐ(:Ñ;Ô;Ð;Ð;Ð;Ø�JŠJ�s—|’|‘~”~Ñ&Ô&Ð&à�	Š	‰Œˆˆˆs   Ä4(E(Å(E,Å/E,r   Ú
tableCacheú-MutableMapping[tuple[Tag, bytes], Any] | Nonec                ój  — | j         rd| v r| d          |                      ¦   «         }|                     d¦  «         t          |¦  «        }t	          ||| j        | j        | j        ¦  «        }g }|D ]}|                      ||||¦  «         Œ| 	                    ¦   «          | 
                    ¦   «         S )zAInternal function, to be shared by save() and TTCollection.save()Úheadr   )r™   rç   ÚpopÚlenr   r�   r’   r”   Ú_writeTablerÉ   ÚreordersTables)rÊ   r§   rð   ÚtagsÚ	numTablesÚwriterÚdoneÚtags           rÏ   rå   zTTFont._save   sº   € ð Ôð 	 F¨d N Nà�ŒLˆLà�yŠy‰{Œ{ˆØ�Š�‰ŒˆÝ˜‘I”Iˆ	åØ�)˜TÔ-¨t¬{¸D¼Oñ
ô 
ˆð ˆØð 	<ð 	<ˆCØ×Ò˜S &¨$°
Ñ;Ô;Ð;Ð;à�Š‰Œˆà×$Ò$Ñ&Ô&Ð&rÖ   c                  ó`   — e Zd ZU ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   dS )úTTFont.XMLSavingOptionsr—   ÚwriteVersionr•   r¥   úSequence[str | bytes] | Noner�   úSequence[str] | NoneÚ
skipTablesÚsplitTablesÚsplitGlyphsr¢   r�   r£   N)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__rÓ   rÖ   rÏ   ÚXMLSavingOptionsrþ   »  sr   € € € € € € ØÐÐÑØÐÐÑØ,Ð,Ð,Ñ,Ø(Ð(Ð(Ñ(ØÐÐÑØÐÐÑØ%Ð%Ð%Ñ%Ø"Ð"Ð"Ñ"Ð"Ð"rÖ   r	  ú
Ú
fileOrPathú*str | os.PathLike[str] | BinaryIO | TextIOÚ
newlinestrÚkwargsúUnpack[XMLSavingOptions]c                óv   — t          j        ||¬¦  «        } | j        |fi |¤Ž |                     ¦   «          dS )aÃ  Export the font as TTX (an XML-based text file), or as a series of text
        files when splitTables is true. In the latter case, the 'fileOrPath'
        argument should be a path to a directory.
        The 'tables' argument must either be falsy (None or empty list, meaning
        dump all tables) or a non-empty list of tables to dump. The 'skipTables'
        argument may be a list of tables to skip, but only when 'tables' is falsy.
        ©r  N)r   Ú	XMLWriterÚ_saveXMLrÉ   )rÊ   r  r  r  rú   s        rÏ   ÚsaveXMLzTTFont.saveXMLÅ  sD   € õ Ô$ Z¸JÐGÑGÔGˆØˆŒ�fÐ'Ð' Ð'Ð'Ð'Ø�Š‰ŒˆˆˆrÖ   Úrawrú   úxmlWriter.XMLWriterrÿ   r   r  r  r  r  c
                ó~  ‡— |�t          dd¦  «         || _        |	| _        |s$|                      ¦   «         }‰rˆfd„|D ¦   «         }|rvddlm}
 d                     |
                     d¦  «        d d…         ¦  «        }
|                     dt          t          | j        ¦  «        ¦  «        d	d
…         |
¬¦  «         n>|                     dt          t          | j        ¦  «        ¦  «        d	d
…         ¬¦  «         |                     ¦   «          |p|}|s|                     ¦   «          n=|j        €t          d¦  «        ‚t          j                             |j        ¦  «        \  }}|D �]&}|rÈ|dz   t%          |¦  «        z   |z   }t'          j        ||j        ¬¦  «        }|                     d|
¬¦  «         |                     ¦   «          |                     ¦   «          |                     t/          |¦  «        t          j                             |¦  «        ¬¦  «         |                     ¦   «          n|}|                      |||¬¦  «         |r=|                     d¦  «         |                     ¦   «          |                     ¦   «          �Œ(|                     d¦  «         |                     ¦   «          d S )Nr¥   r´   c                ó   •— g | ]}|‰v¯|‘Œ	S rÓ   rÓ   )Ú.0rü   r  s     €rÏ   ú
<listcomp>z#TTFont._saveXML.<locals>.<listcomp>ë  s#   ø€ ÐIÐIÐI #°3¸jÐ3HÐ3H˜#Ð3HÐ3HÐ3HrÖ   r   )Úversionú.é   ÚttFontr¶   r¦   )r�   ÚttLibVersion)r�   zJsplitTables requires the file name to be a file system path, not a stream.r  )r  )Úsrc©r  )r   r¢   r£   rç   Ú	fontToolsr  ÚjoinÚsplitÚbegintagÚreprr   r�   ÚnewlineÚfilenamer   rÂ   ÚpathÚsplitextÚtagToIdentifierr   r  r  Ú	simpletagÚtagToXMLÚbasenameÚ_tableToXMLÚendtagrÉ   )rÊ   rú   rÿ   r¥   r�   r  r  r  r¢   r£   r  r)  Úextrü   Ú	tablePathÚtableWriters        `          rÏ   r  zTTFont._saveXML×  sí  ø€ ð ÐÝ˜gÐ'BÑCÔCÐCà'>ˆÔ$Ø%:ˆÔ"Øð 	JØ—Y’Y‘[”[ˆFØð JØIÐIÐIÐI¨ÐIÑIÔI�àð 
	WØ)Ð)Ð)Ð)Ð)Ð)à—h’h˜wŸ}š}¨SÑ1Ô1°"°1°"Ô5Ñ6Ô6ˆGØ�OŠOØÝ ¥ tÔ'7Ñ!8Ô!8Ñ9Ô9¸!¸B¸$Ô?Ø$ð ñ ô ð ð ð �OŠO˜Hµ$µu¸TÔ=MÑ7NÔ7NÑ2OÔ2OÐPQÐRTÐPTÔ2UˆOÑVÔVÐVØ�ŠÑÔÐð "Ð0 [ˆàð 	:Ø�NŠNÑÔÐÐàŒÐ&Ý Ø`ñô ð õ œ×(Ò(¨¬Ñ9Ô9‰IˆD�#àð 	$ñ 	$ˆCØð %Ø  3™J­¸Ñ)=Ô)=Ñ=ÀÑC�	Ý'Ô1Ø¨&Ô*;ðñ ô �ð ×$Ò$ X¸GÐ$ÑDÔDÐDØ×#Ò#Ñ%Ô%Ð%Ø×#Ò#Ñ%Ô%Ð%Ø× Ò ¥¨#¡¤µB´G×4DÒ4DÀYÑ4OÔ4OÐ ÑPÔPÐPØ—’Ñ Ô Ð Ð à$�Ø×Ò˜[¨#¸;ÐÑGÔGÐGØð $Ø×"Ò" 8Ñ,Ô,Ð,Ø×#Ò#Ñ%Ô%Ð%Ø×!Ò!Ñ#Ô#Ð#ùØ�Š�hÑÔÐØ�ŠÑÔÐÐÐrÖ   rü   ústr | bytesc                ó4  — |�t          dd¦  «         || v r| |         }d|z  }nd|z  }t                               |¦  «         || vrd S t          |¦  «        }i }t	          |d¦  «        rd|d<   ddlm}	 |j        |	k    rd	|d
<    |j        |fi |¤Ž | 	                    ¦   «          |dv r| 
                    || |¬¦  «         n| 
                    || ¦  «         |                     |¦  «         | 	                    ¦   «          | 	                    ¦   «          d S )Nr¥   r´   zDumping '%s' table...zNo '%s' table found.ÚERRORzdecompilation errorr¶   r…   Tr  )ÚglyfÚGLYFr!  )r   ÚlogÚinfor-  rÁ   Útables.DefaultTabler†   Ú	__class__r%  r'  ÚtoXMLr0  )
rÊ   rú   rü   r¥   r  ÚtableÚreportÚxmlTagÚattrsr†   s
             rÏ   r/  zTTFont._tableToXML  sS  € ð ÐÝ˜gÐ'BÑCÔCÐCØ�$ˆ;ˆ;Ø˜”IˆEØ,¨sÑ2ˆFˆFà+¨cÑ1ˆFÝ�Š�ÑÔÐØ�dˆ?ˆ?ØˆFÝ˜#‘”ˆØ "ˆÝ�5˜'Ñ"Ô"ð 	3Ø2ˆE�'‰NØ5Ð5Ð5Ð5Ð5Ð5àŒ?˜lÒ*Ð*ØˆE�%‰LØˆŒ˜Ð(Ð( %Ð(Ð(Ð(Ø�ŠÑÔÐØÐ"Ð"Ð"Ø�KŠK˜ °+ˆKÑ>Ô>Ð>Ð>à�KŠK˜ Ñ%Ô%Ð%Ø�Š�fÑÔÐØ�ŠÑÔÐØ�ŠÑÔÐÐÐrÖ   c                óÊ   — |�t          dd¦  «         d| v sd| v rd| v r|                      ¦   «          ddlm} |                     || ¦  «        }|                     ¦   «          dS )	z_Import a TTX file (an XML-based text format), so as to recreate
        a font object.
        Nr¥   r´   ÚMAXPÚmaxpÚpostr   )Ú	xmlReader)r   ÚgetGlyphOrderÚfontTools.miscrF  Ú	XMLReaderrµ   )rÊ   r  r¥   rF  rŽ   s        rÏ   Ú	importXMLzTTFont.importXML>  s€   € ð ÐÝ˜gÐ'BÑCÔCÐCà�dˆNˆN˜f¨˜n˜n°&¸D°.°.ð
 ×ÒÑ Ô Ð à,Ð,Ð,Ð,Ð,Ð,à×$Ò$ Z°Ñ6Ô6ˆØ�Š‰ŒˆˆˆrÖ   c                ó   — || j         v S )zbReturn true if the table identified by ``tag`` has been
        decompiled and loaded into memory.©r�   ©rÊ   rü   s     rÏ   ÚisLoadedzTTFont.isLoadedS  s   € ð �d”kÐ!Ð!rÖ   c                óh   — |                       |¦  «        rdS | j        r|| j        v rdS |dk    rdS dS )z±Test if the table identified by ``tag`` is present in the font.

        As well as this method, ``tag in font`` can also be used to determine the
        presence of the table.TÚ
GlyphOrderF)rN  rŽ   rM  s     rÏ   Úhas_keyzTTFont.has_keyX  sM   € ð
 �=Š=˜ÑÔð 	Ø�4ØŒ[ð 	˜S D¤KÐ/Ð/Ø�4Ø�LÒ Ð Ø�4à�5rÖ   c                ó<  — t          | j                             ¦   «         ¦  «        }| j        rBt          | j                             ¦   «         ¦  «        D ]}||vr|                     |¦  «         Œd|v r|                     d¦  «         t          |¦  «        }dg|z   S )zSReturns the list of tables in the font, along with the ``GlyphOrder`` pseudo-table.rP  )ræ   r�   rç   rŽ   ÚappendÚremoveÚsortedTagList)rÊ   rç   Úkeys      rÏ   rç   zTTFont.keysh  sŸ   € å�D”K×$Ò$Ñ&Ô&Ñ'Ô'ˆØŒ;ð 	%Ý˜DœK×,Ò,Ñ.Ô.Ñ/Ô/ð %ð %�Ø˜d�?�?Ø—K’K Ñ$Ô$Ð$øà˜4ÐÐØ�KŠK˜Ñ%Ô%Ð%Ý˜TÑ"Ô"ˆØˆ~ Ñ$Ð$rÖ   Úrecursec                ó¸   — |                       ¦   «         D ]=}| |         }|€	| j        du}|r&t          |d¦  «        r|                     |¬¦  «         Œ>d| _        dS )zEDecompile all the tables, even if a TTFont was opened in 'lazy' mode.NFÚensureDecompiled)rW  )rç   r–   rÁ   rY  )rÊ   rW  rü   r>  s       rÏ   rY  zTTFont.ensureDecompiledu  sp   € à—9’9‘;”;ð 	8ð 	8ˆCØ˜”IˆEØˆØœ)¨5Ð0�Øð 8�7 5Ð*<Ñ=Ô=ð 8Ø×&Ò&¨wÐ&Ñ7Ô7Ð7øØˆŒ	ˆ	ˆ	rÖ   c                ó^   — t          t          |                      ¦   «         ¦  «        ¦  «        S rÒ   )rõ   ræ   rç   rÔ   s    rÏ   Ú__len__zTTFont.__len__  s    € Ý•4˜Ÿ	š	™œÑ$Ô$Ñ%Ô%Ð%rÖ   úLiteral['BASE']úB_A_S_E_.table_B_A_S_E_c                ó   — d S rÒ   rÓ   rM  s     rÏ   Ú__getitem__zTTFont.__getitem__‚  ó   € ØLOÈCrÖ   úLiteral['CBDT']úC_B_D_T_.table_C_B_D_T_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__„  r`  rÖ   úLiteral['CBLC']úC_B_L_C_.table_C_B_L_C_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__†  r`  rÖ   úLiteral['CFF ']úC_F_F_.table_C_F_F_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ˆ  ó   € ØHKÈrÖ   úLiteral['CFF2']úC_F_F__2.table_C_F_F__2c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Š  r`  rÖ   úLiteral['COLR']úC_O_L_R_.table_C_O_L_R_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Œ  r`  rÖ   úLiteral['CPAL']úC_P_A_L_.table_C_P_A_L_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ž  r`  rÖ   úLiteral['DMAP']úD_M_A_P_.table_D_M_A_P_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__�  r`  rÖ   úLiteral['DSIG']úD_S_I_G_.table_D_S_I_G_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__’  r`  rÖ   úLiteral['EBDT']úE_B_D_T_.table_E_B_D_T_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__”  r`  rÖ   úLiteral['EBLC']úE_B_L_C_.table_E_B_L_C_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__–  r`  rÖ   úLiteral['EBSC']úE_B_S_C_.table_E_B_S_C_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__˜  r`  rÖ   úLiteral['FFTM']úF_F_T_M_.table_F_F_T_M_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__š  r`  rÖ   úLiteral['GDEF']úG_D_E_F_.table_G_D_E_F_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__œ  r`  rÖ   úLiteral['GLYF']úG_L_Y_F_.table_G_L_Y_F_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ž  r`  rÖ   úLiteral['GPOS']úG_P_O_S_.table_G_P_O_S_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__   r`  rÖ   úLiteral['GSUB']úG_S_U_B_.table_G_S_U_B_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¢  r`  rÖ   úLiteral['GVAR']úG_V_A_R_.table_G_V_A_R_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¤  r`  rÖ   úLiteral['HHEA']úH_H_E_A_.table_H_H_E_A_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¦  r`  rÖ   úLiteral['HMTX']úH_M_T_X_.table_H_M_T_X_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¨  r`  rÖ   úLiteral['HVAR']úH_V_A_R_.table_H_V_A_R_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ª  r`  rÖ   úLiteral['IFT ']úI_F_T_.table_I_F_T_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¬  rj  rÖ   úLiteral['IFTX']úI_F_T_X_.table_I_F_T_X_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__®  r`  rÖ   úLiteral['JSTF']úJ_S_T_F_.table_J_S_T_F_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__°  r`  rÖ   úLiteral['LTSH']úL_T_S_H_.table_L_T_S_H_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__²  r`  rÖ   úLiteral['LOCA']úL_O_C_A_.table_L_O_C_A_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__´  r`  rÖ   úLiteral['MATH']úM_A_T_H_.table_M_A_T_H_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¶  r`  rÖ   úLiteral['MAXP']úM_A_X_P_.table_M_A_X_P_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¸  r`  rÖ   úLiteral['MVAR']úM_V_A_R_.table_M_V_A_R_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__º  r`  rÖ   úLiteral['STAT']úS_T_A_T_.table_S_T_A_T_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¼  r`  rÖ   úLiteral['SVG ']úS_V_G_.table_S_V_G_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__¾  rj  rÖ   úLiteral['TSI0']úT_S_I__0.table_T_S_I__0c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__À  r`  rÖ   úLiteral['TSI1']úT_S_I__1.table_T_S_I__1c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Â  r`  rÖ   úLiteral['TSI2']úT_S_I__2.table_T_S_I__2c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ä  r`  rÖ   úLiteral['TSI3']úT_S_I__3.table_T_S_I__3c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Æ  r`  rÖ   úLiteral['TSI5']úT_S_I__5.table_T_S_I__5c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__È  r`  rÖ   úLiteral['TSIB']úT_S_I_B_.table_T_S_I_B_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ê  r`  rÖ   úLiteral['TSIC']úT_S_I_C_.table_T_S_I_C_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ì  r`  rÖ   úLiteral['TSID']úT_S_I_D_.table_T_S_I_D_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Î  r`  rÖ   úLiteral['TSIJ']úT_S_I_J_.table_T_S_I_J_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ð  r`  rÖ   úLiteral['TSIP']úT_S_I_P_.table_T_S_I_P_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ò  r`  rÖ   úLiteral['TSIS']úT_S_I_S_.table_T_S_I_S_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ô  r`  rÖ   úLiteral['TSIV']úT_S_I_V_.table_T_S_I_V_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ö  r`  rÖ   úLiteral['TTFA']úT_T_F_A_.table_T_T_F_A_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ø  r`  rÖ   úLiteral['VARC']úV_A_R_C_.table_V_A_R_C_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ú  r`  rÖ   úLiteral['VDMX']úV_D_M_X_.table_V_D_M_X_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Ü  r`  rÖ   úLiteral['VHEA']úV_H_E_A_.table_V_H_E_A_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__Þ  r`  rÖ   úLiteral['VMTX']úV_M_T_X_.table_V_M_T_X_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__à  r`  rÖ   úLiteral['VORG']úV_O_R_G_.table_V_O_R_G_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__â  r`  rÖ   úLiteral['VVAR']úV_V_A_R_.table_V_V_A_R_c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ä  r`  rÖ   úLiteral['Debg']úD__e_b_g.table_D__e_b_gc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__æ  r`  rÖ   úLiteral['Feat']úF__e_a_t.table_F__e_a_tc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__è  r`  rÖ   úLiteral['Glat']úG__l_a_t.table_G__l_a_tc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ê  r`  rÖ   úLiteral['Gloc']úG__l_o_c.table_G__l_o_cc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ì  r`  rÖ   úLiteral['OS/2']úO_S_2f_2.table_O_S_2f_2c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__î  r`  rÖ   úLiteral['Silf']úS__i_l_f.table_S__i_l_fc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ð  r`  rÖ   úLiteral['Sill']úS__i_l_l.table_S__i_l_lc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ò  r`  rÖ   úLiteral['ankr']ú_a_n_k_r.table__a_n_k_rc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ô  r`  rÖ   úLiteral['avar']ú_a_v_a_r.table__a_v_a_rc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ö  r`  rÖ   úLiteral['bsln']ú_b_s_l_n.table__b_s_l_nc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ø  r`  rÖ   úLiteral['bdat']ú_b_d_a_t.table__b_d_a_tc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ú  r`  rÖ   úLiteral['bhed']ú_b_h_e_d.table__b_h_e_dc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__ü  r`  rÖ   úLiteral['bgcl']ú_b_g_c_l.table__b_g_c_lc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__þ  r`  rÖ   úLiteral['bloc']ú_b_l_o_c.table__b_l_o_cc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__   r`  rÖ   úLiteral['cidg']ú_c_i_d_g.table__c_i_d_gc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['cmap']ú_c_m_a_p.table__c_m_a_pc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['cvar']ú_c_v_a_r.table__c_v_a_rc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['cvt ']ú_c_v_t.table__c_v_tc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  rj  rÖ   úLiteral['feat']ú_f_e_a_t.table__f_e_a_tc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__
  r`  rÖ   úLiteral['fpgm']ú_f_p_g_m.table__f_p_g_mc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['fvar']ú_f_v_a_r.table__f_v_a_rc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['gasp']ú_g_a_s_p.table__g_a_s_pc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['gcid']ú_g_c_i_d.table__g_c_i_dc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['glyf']ú_g_l_y_f.table__g_l_y_fc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['gvar']ú_g_v_a_r.table__g_v_a_rc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['hdmx']ú_h_d_m_x.table__h_d_m_xc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['head']ú_h_e_a_d.table__h_e_a_dc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['hhea']ú_h_h_e_a.table__h_h_e_ac                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['hmtx']ú_h_m_t_x.table__h_m_t_xc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__  r`  rÖ   úLiteral['kern']ú_k_e_r_n.table__k_e_r_nc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__   r`  rÖ   úLiteral['lcar']ú_l_c_a_r.table__l_c_a_rc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__"  r`  rÖ   úLiteral['loca']ú_l_o_c_a.table__l_o_c_ac                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__$  r`  rÖ   úLiteral['ltag']ú_l_t_a_g.table__l_t_a_gc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__&  r`  rÖ   úLiteral['maxp']ú_m_a_x_p.table__m_a_x_pc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__(  r`  rÖ   úLiteral['meta']ú_m_e_t_a.table__m_e_t_ac                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__*  r`  rÖ   úLiteral['mort']ú_m_o_r_t.table__m_o_r_tc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__,  r`  rÖ   úLiteral['morx']ú_m_o_r_x.table__m_o_r_xc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__.  r`  rÖ   úLiteral['name']ú_n_a_m_e.table__n_a_m_ec                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__0  r`  rÖ   úLiteral['opbd']ú_o_p_b_d.table__o_p_b_dc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__2  r`  rÖ   úLiteral['post']ú_p_o_s_t.table__p_o_s_tc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__4  r`  rÖ   úLiteral['prep']ú_p_r_e_p.table__p_r_e_pc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__6  r`  rÖ   úLiteral['prop']ú_p_r_o_p.table__p_r_o_pc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__8  r`  rÖ   úLiteral['sbix']ú_s_b_i_x.table__s_b_i_xc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__:  r`  rÖ   úLiteral['trak']ú_t_r_a_k.table__t_r_a_kc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__<  r`  rÖ   úLiteral['vhea']ú_v_h_e_a.table__v_h_e_ac                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__>  r`  rÖ   úLiteral['vmtx']ú_v_m_t_x.table__v_m_t_xc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__@  r`  rÖ   úLiteral['GlyphOrder']rP  c                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__B  s   € ØEHÀSrÖ   úDefaultTable | GlyphOrderc                ó   — d S rÒ   rÓ   rM  s     rÏ   r_  zTTFont.__getitem__D  s   € ØJMÈ#rÖ   c                óú   — t          |¦  «        }| j                             |¦  «        }|€O|dk    rt          |¦  «        }|| j        |<   n/| j        �|                      |¦  «        }nt          d|z  ¦  «        ‚|S )NrP  ú'%s' table not found)r   r�   r½   rP  rŽ   Ú
_readTableÚKeyError©rÊ   rü   r>  s      rÏ   r_  zTTFont.__getitem__G  s~   € Ý�#‰hŒhˆØ”—’ Ñ$Ô$ˆØˆ=Ø�lÒ"Ð"Ý" 3™œ�Ø#(�”˜CÑ Ð Ø”Ð(ØŸš¨Ñ,Ô,��åÐ5¸Ñ;Ñ<Ô<Ð<ØˆrÖ   r   r†   c                óÊ  — t                                d|¦  «         | j        €J ‚| j        |         }| j        � | j                             ||f¦  «        }|�|S t          |¦  «        } ||¦  «        }|| j        |<   t                                d|¦  «         	 |                     || ¦  «         n # t          $ r“ | j	        s‚ t            
                    d|¦  «         ddlm} t          ¦   «         }t          j        |¬¦  «          ||¦  «        }|                     ¦   «         |_        || j        |<   |                     || ¦  «         Y nw xY w| j        �|| j        ||f<   |S )NúReading '%s' table from diskzDecompiling '%s' tablez@An exception occurred during the decompilation of the '%s' tabler¶   r…   )r§   )r9  ÚdebugrŽ   r¡   r½   ÚgetTableClassr�   Ú	decompileÚ	Exceptionrš   Ú	exceptionr;  r†   r   rÛ   Ú	print_excrê   r6  )rÊ   rü   Údatar>  Ú
tableClassr†   r§   s          rÏ   r…  zTTFont._readTableT  s‘  € Ý�	Š	Ð0°#Ñ6Ô6Ð6ØŒ{Ð&Ð&Ð&ØŒ{˜3ÔˆØÔÐ'ØÔ$×(Ò(¨#¨t¨Ñ5Ô5ˆEØÐ Ø�Ý" 3Ñ'Ô'ˆ
Ø�
˜3‘”ˆØ ˆŒ�CÑÝ�	Š	Ð*¨CÑ0Ô0Ð0ð	(Ø�OŠO˜D $Ñ'Ô'Ð'Ð'øÝð 	(ð 	(ð 	(ØÔ-ð Øå�MŠMØRÐTWñô ð ð :Ð9Ð9Ð9Ð9Ð9å‘:”:ˆDÝÔ TÐ*Ñ*Ô*Ð*Ø �L Ñ%Ô%ˆEØŸ-š-™/œ/ˆEŒKØ$ˆDŒK˜ÑØ�OŠO˜D $Ñ'Ô'Ð'Ð'Ð'ð	(øøøð ÔÐ'Ø,1ˆDÔ˜c 4˜[Ñ)Øˆs   ÂB0 Â0BEÅEr>  c                ó4   — || j         t          |¦  «        <   d S rÒ   )r�   r   r‡  s      rÏ   Ú__setitem__zTTFont.__setitem__u  s   € Ø %ˆŒ•C˜‘H”HÑÐÐrÖ   c                óŒ   — || vrt          d|z  ¦  «        ‚|| j        v r| j        |= | j        r|| j        v r| j        |= d S d S d S )Nr„  )r†  r�   rŽ   rM  s     rÏ   Ú__delitem__zTTFont.__delitem__x  sl   € Ø�dˆ?ˆ?ÝÐ1°CÑ7Ñ8Ô8Ð8Ø�$”+ÐÐØ”˜CÐ ØŒ;ð 	!˜3 $¤+Ð-Ð-Ø”˜CÐ Ð Ð ð	!ð 	!Ð-Ð-rÖ   úB_A_S_E_.table_B_A_S_E_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get€  ó   € ØKNÈ3rÖ   úC_B_D_T_.table_C_B_D_T_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get‚  r˜  rÖ   úC_B_L_C_.table_C_B_L_C_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get„  r˜  rÖ   úC_F_F_.table_C_F_F_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get†  ó   € ØGJÀsrÖ   úC_F_F__2.table_C_F_F__2 | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getˆ  r˜  rÖ   úC_O_L_R_.table_C_O_L_R_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getŠ  r˜  rÖ   úC_P_A_L_.table_C_P_A_L_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getŒ  r˜  rÖ   úD_M_A_P_.table_D_M_A_P_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getŽ  r˜  rÖ   úD_S_I_G_.table_D_S_I_G_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get�  r˜  rÖ   úE_B_D_T_.table_E_B_D_T_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get’  r˜  rÖ   úE_B_L_C_.table_E_B_L_C_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get”  r˜  rÖ   úE_B_S_C_.table_E_B_S_C_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get–  r˜  rÖ   úF_F_T_M_.table_F_F_T_M_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get˜  r˜  rÖ   úG_D_E_F_.table_G_D_E_F_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getš  r˜  rÖ   úG_L_Y_F_.table_G_L_Y_F_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getœ  r˜  rÖ   úG_P_O_S_.table_G_P_O_S_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getž  r˜  rÖ   úG_S_U_B_.table_G_S_U_B_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get   r˜  rÖ   úG_V_A_R_.table_G_V_A_R_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¢  r˜  rÖ   úH_H_E_A_.table_H_H_E_A_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¤  r˜  rÖ   úH_M_T_X_.table_H_M_T_X_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¦  r˜  rÖ   úH_V_A_R_.table_H_V_A_R_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¨  r˜  rÖ   úI_F_T_.table_I_F_T_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getª  rŸ  rÖ   úI_F_T_X_.table_I_F_T_X_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¬  r˜  rÖ   úJ_S_T_F_.table_J_S_T_F_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get®  r˜  rÖ   úL_T_S_H_.table_L_T_S_H_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get°  r˜  rÖ   úL_O_C_A_.table_L_O_C_A_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get²  r˜  rÖ   úM_A_T_H_.table_M_A_T_H_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get´  r˜  rÖ   úM_A_X_P_.table_M_A_X_P_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¶  r˜  rÖ   úM_V_A_R_.table_M_V_A_R_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¸  r˜  rÖ   úS_T_A_T_.table_S_T_A_T_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getº  r˜  rÖ   úS_V_G_.table_S_V_G_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¼  rŸ  rÖ   úT_S_I__0.table_T_S_I__0 | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get¾  r˜  rÖ   úT_S_I__1.table_T_S_I__1 | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÀ  r˜  rÖ   úT_S_I__2.table_T_S_I__2 | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÂ  r˜  rÖ   úT_S_I__3.table_T_S_I__3 | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÄ  r˜  rÖ   úT_S_I__5.table_T_S_I__5 | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÆ  r˜  rÖ   úT_S_I_B_.table_T_S_I_B_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÈ  r˜  rÖ   úT_S_I_C_.table_T_S_I_C_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÊ  r˜  rÖ   úT_S_I_D_.table_T_S_I_D_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÌ  r˜  rÖ   úT_S_I_J_.table_T_S_I_J_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÎ  r˜  rÖ   úT_S_I_P_.table_T_S_I_P_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÐ  r˜  rÖ   úT_S_I_S_.table_T_S_I_S_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÒ  r˜  rÖ   úT_S_I_V_.table_T_S_I_V_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÔ  r˜  rÖ   úT_T_F_A_.table_T_T_F_A_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÖ  r˜  rÖ   úV_A_R_C_.table_V_A_R_C_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getØ  r˜  rÖ   úV_D_M_X_.table_V_D_M_X_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÚ  r˜  rÖ   úV_H_E_A_.table_V_H_E_A_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÜ  r˜  rÖ   úV_M_T_X_.table_V_M_T_X_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getÞ  r˜  rÖ   úV_O_R_G_.table_V_O_R_G_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getà  r˜  rÖ   úV_V_A_R_.table_V_V_A_R_ | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getâ  r˜  rÖ   úD__e_b_g.table_D__e_b_g | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getä  r˜  rÖ   úF__e_a_t.table_F__e_a_t | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getæ  r˜  rÖ   úG__l_a_t.table_G__l_a_t | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getè  r˜  rÖ   úG__l_o_c.table_G__l_o_c | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getê  r˜  rÖ   úO_S_2f_2.table_O_S_2f_2 | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getì  r˜  rÖ   úS__i_l_f.table_S__i_l_f | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getî  r˜  rÖ   úS__i_l_l.table_S__i_l_l | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getð  r˜  rÖ   ú_a_n_k_r.table__a_n_k_r | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getò  r˜  rÖ   ú_a_v_a_r.table__a_v_a_r | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getô  r˜  rÖ   ú_b_s_l_n.table__b_s_l_n | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getö  r˜  rÖ   ú_b_g_c_l.table__b_g_c_l | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getø  r˜  rÖ   ú_c_i_d_g.table__c_i_d_g | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getú  r˜  rÖ   ú_c_m_a_p.table__c_m_a_p | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getü  r˜  rÖ   ú_c_v_a_r.table__c_v_a_r | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.getþ  r˜  rÖ   ú_c_v_t.table__c_v_t | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get   rŸ  rÖ   ú_f_e_a_t.table__f_e_a_t | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_f_p_g_m.table__f_p_g_m | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_f_v_a_r.table__f_v_a_r | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_g_a_s_p.table__g_a_s_p | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_g_c_i_d.table__g_c_i_d | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get
  r˜  rÖ   ú_g_l_y_f.table__g_l_y_f | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_g_v_a_r.table__g_v_a_r | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_h_d_m_x.table__h_d_m_x | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_h_e_a_d.table__h_e_a_d | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_h_h_e_a.table__h_h_e_a | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_h_m_t_x.table__h_m_t_x | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_k_e_r_n.table__k_e_r_n | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_l_c_a_r.table__l_c_a_r | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_l_o_c_a.table__l_o_c_a | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_l_t_a_g.table__l_t_a_g | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get  r˜  rÖ   ú_m_a_x_p.table__m_a_x_p | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get   r˜  rÖ   ú_m_e_t_a.table__m_e_t_a | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get"  r˜  rÖ   ú_m_o_r_t.table__m_o_r_t | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get$  r˜  rÖ   ú_m_o_r_x.table__m_o_r_x | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get&  r˜  rÖ   ú_n_a_m_e.table__n_a_m_e | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get(  r˜  rÖ   ú_o_p_b_d.table__o_p_b_d | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get*  r˜  rÖ   ú_p_o_s_t.table__p_o_s_t | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get,  r˜  rÖ   ú_p_r_e_p.table__p_r_e_p | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get.  r˜  rÖ   ú_p_r_o_p.table__p_r_o_p | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get0  r˜  rÖ   ú_s_b_i_x.table__s_b_i_x | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get2  r˜  rÖ   ú_t_r_a_k.table__t_r_a_k | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get4  r˜  rÖ   ú_v_h_e_a.table__v_h_e_a | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get6  r˜  rÖ   ú_v_m_t_x.table__v_m_t_x | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get8  r˜  rÖ   c                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get:  s   € Ø=@¸SrÖ   ú&DefaultTable | GlyphOrder | Any | Nonec                ó   — d S rÒ   rÓ   rM  s     rÏ   r½   z
TTFont.get<  s   € ØORÈsrÖ   Údefaultr‡   ú(DefaultTable | GlyphOrder | Any | _VT_coc                ó   — d S rÒ   rÓ   ©rÊ   rü   rU  s      rÏ   r½   z
TTFont.get>  s	   € ð 47°3rÖ   c                ó8   — 	 | |         S # t           $ r |cY S w xY w)zGReturns the table if it exists or (optionally) a default if it doesn't.)r†  rX  s      rÏ   r½   z
TTFont.getC  s5   € ð	Ø˜”9ÐøÝð 	ð 	ð 	ØˆNˆNˆNð	øøøs   ‚
 Š˜c                ó¢   — || _         t          | d¦  «        r| `dD ]2}|                      |¦  «        r| |                              |¦  «         Œ3dS )zmSet the glyph order

        Args:
                glyphOrder ([str]): List of glyph names in order.
        rŸ   )r8  r7  N)r�   rÁ   rŸ   rN  ÚsetGlyphOrder)rÊ   r�   rü   s      rÏ   r[  zTTFont.setGlyphOrderL  sj   € ð %ˆŒÝ�4Ð1Ñ2Ô2ð 	,ØÐ+Ø#ð 	4ð 	4ˆCØ�}Š}˜SÑ!Ô!ð 4Ø�S”	×'Ò'¨
Ñ3Ô3Ð3øð	4ð 	4rÖ   c                óÖ  — 	 | j         S # t          $ r Y nw xY wd| v r"| d         }|                     ¦   «         | _         n¥d| v r�| d                              ¦   «         }|€|                      ¦   «          npt	          |¦  «        |                      ¦   «         k     r/t                               d¦  «         |                      ¦   «          n|| _         n|                      ¦   «          | j         S )zDReturns a list of glyph names ordered by their position in the font.úCFF rE  NzMNot enough names found in the 'post' table, generating them from cmap instead)r�   ÚAttributeErrorrG  Ú_getGlyphNamesFromCmaprõ   ÚgetGlyphCountr9  Úwarning)rÊ   Úcffr�   s      rÏ   rG  zTTFont.getGlyphOrderY  s  € ð	Ø”?Ð"øÝð 	ð 	ð 	ØˆDð	øøøà�Tˆ>ˆ>Ø�v”,ˆCØ!×/Ò/Ñ1Ô1ˆDŒOˆOØ�tˆ^ˆ^à˜fœ×3Ò3Ñ5Ô5ˆJØÐ!ð ×+Ò+Ñ-Ô-Ð-Ð-Ý�Z‘” 4×#5Ò#5Ñ#7Ô#7Ò7Ð7õ —’Øcñô ð ð ×+Ò+Ñ-Ô-Ð-Ð-à",�”�à×'Ò'Ñ)Ô)Ð)ØŒÐs   ‚	 ‰
•c                óL   — t          |                      ¦   «         ¦  «        dk    S )zBReturns whether the font has glyph IDs that do not fit in 16 bits.i   )rõ   rG  rÔ   s    rÏ   ÚhasExtendedGlyphIDszTTFont.hasExtendedGlyphIDs|  s!   € å�4×%Ò%Ñ'Ô'Ñ(Ô(¨7Ò2Ð2rÖ   c                óF   — d| v rdnd}t          | |         j        ¦  «        S )z)Returns the number of glyphs in the font.rC  rD  )r¬   Ú	numGlyphs)rÊ   ÚmaxpTags     rÏ   r`  zTTFont.getGlyphCount€  s(   € à" d˜N˜N�&�&°ˆÝ�4˜”=Ô*Ñ+Ô+Ð+rÖ   c                óÚ  — i }dD ]4}|                       |¦  «        r| j                             |¦  «        ||<   Œ5|                      ¦   «         }d„ t	          |¦  «        D ¦   «         }d|d<   || _        i }t          ¦   «         }d| v r>| d         j        D ]0}|                     ¦   «         r|                     |j	        ¦  «         Œ1dD ]y}|| vrŒ| |         j        D ]d}|                     ¦   «         sŒ|j	         
                    ¦   «         D ]3\  }}	|dk    r||v rŒ|	|v rt          ||	         |¦  «        ||	<   Œ.|||	<   Œ4ŒeŒzi }
t          |¦  «        D ]W\  }}||v rN|                      ||         ¦  «        }|
                     |d¦  «        dz   x}|
|<   |dk    r
d||dz
  fz  }|||<   ŒXdD ]}| j                             |d ¦  «         Œ|| _        | j                             |¦  «         d S )	N)ÚcmapÚDMAPc                ó   — g | ]}d |z  ‘ŒS ©ú	glyph%.5drÓ   )r  Úis     rÏ   r  z1TTFont._getGlyphNamesFromCmap.<locals>.<listcomp>�  s   € Ð@Ð@Ð@¨!�k A‘oÐ@Ð@Ð@rÖ   z.notdefr   rj  ri  r¶   z%s.alt%d)rN  r�   rô   r`  Úranger�   ÚsetÚ	isUnicodeÚupdateri  ÚitemsÚminÚ	enumerateÚ_makeGlyphNamer½   )rÊ   ÚloadingTablesrü   rf  r�   ÚreversecmapÚdmapCodepointsr>  Ú	codepointr»   ÚuseCountrn  ÚtempNameÚ	glyphNameÚnumUsess                  rÏ   r_  zTTFont._getGlyphNamesFromCmap…  sv  € ð ˆØ#ð 	:ð 	:ˆCØ�}Š}˜SÑ!Ô!ð :ð &*¤[§_¢_°SÑ%9Ô%9�˜cÑ"øð ×&Ò&Ñ(Ô(ˆ	Ø@Ð@­u°YÑ/?Ô/?Ð@Ñ@Ô@ˆ
Ø!ˆ
�1‰ð %ˆŒð ˆÝ™œˆØ�Tˆ>ˆ>Ø˜fœÔ,ð 6ð 6�Ø—?’?Ñ$Ô$ð 6Ø"×)Ò)¨%¬*Ñ5Ô5Ð5øØ#ð 	6ð 	6ˆCØ˜$ˆˆØØ˜cœÔ)ð 	6ð 	6�Ø—’Ñ(Ô(ð ØØ',¤z×'7Ò'7Ñ'9Ô'9ð 6ð 6‘O�I˜tØ˜f’}�}¨°nÐ)DÐ)DØ Ø˜{Ð*Ð*Ý,/°¸DÔ0AÀ9Ñ,MÔ,M˜ DÑ)Ð)à,5˜ DÑ)Ð)ð6ð	6ð ˆÝ$ ZÑ0Ô0ð 		*ð 		*‰KˆAˆxØ˜;Ð&Ð&ð !×/Ò/°¸HÔ0EÑFÔF�	Ø08·²¸YÈÑ0JÔ0JÈQÑ0NÐN�˜( 9Ñ-Ø˜Q’;�;Ø *¨i¸À1¹Ð-EÑ E�IØ )�
˜1‘øð
 $ð 	'ð 	'ˆCØŒK�OŠO˜C Ñ&Ô&Ð&Ð&Ø$ˆŒØŒ×Ò˜=Ñ)Ô)Ð)Ð)Ð)rÖ   rz  c                óZ   — ddl m} | |j        v r|j        |          S | dk    rd| z  S d| z  S )Nr   )Úagliÿÿ  zuni%04Xzu%X)r"  r€  ÚUV2AGL)rz  r€  s     rÏ   rv  zTTFont._makeGlyphNameÌ  sO   € à!Ð!Ð!Ð!Ð!Ð!à˜œ
Ð"Ð"Ø”:˜iÔ(Ð(Ø˜&Ò Ð Ø˜yÑ(Ð(à˜9Ñ$Ð$rÖ   c                óH   — t          |                      ¦   «         ¦  «        }|S )z1Get a list of glyph names, sorted alphabetically.)ÚsortedrG  )rÊ   Ú
glyphNamess     rÏ   ÚgetGlyphNameszTTFont.getGlyphNames×  s!   € å˜D×.Ò.Ñ0Ô0Ñ1Ô1ˆ
ØÐrÖ   c                ó\   — ddl m} |                     |                      ¦   «         ¦  «        S )zZGet a list of glyph names, sorted alphabetically,
        but not case sensitive.
        r   )Ú	textTools)rH  r‡  ÚcaselessSortrG  )rÊ   r‡  s     rÏ   ÚgetGlyphNames2zTTFont.getGlyphNames2Ü  s6   € ð 	-Ð,Ð,Ð,Ð,Ð,à×%Ò% d×&8Ò&8Ñ&:Ô&:Ñ;Ô;Ð;rÖ   ÚglyphIDc                ób   — 	 |                       ¦   «         |         S # t          $ r d|z  cY S w xY w)zÀReturns the name for the glyph with the given ID.

        If no name is available, synthesises one with the form ``glyphXXXXX``` where
        ```XXXXX`` is the zero-padded glyph ID.
        rm  )rG  Ú
IndexError)rÊ   rŠ  s     rÏ   ÚgetGlyphNamezTTFont.getGlyphNameä  sJ   € ð	)Ø×%Ò%Ñ'Ô'¨Ô0Ð0øÝð 	)ð 	)ð 	)Ø Ñ(Ð(Ð(Ð(ð	)øøøs   ‚ œ.­.ÚlstúSequence[int]c                ój   ‡‡— |                       ¦   «         Št          ‰¦  «        Šˆˆfd„|D ¦   «         S )z8Converts a list of glyph IDs into a list of glyph names.c                ó6   •— g | ]}|‰k     r‰|         nd |z  ‘ŒS rl  rÓ   )r  ÚgidÚcntr�   s     €€rÏ   r  z+TTFont.getGlyphNameMany.<locals>.<listcomp>ó  s.   ø€ ÐSÐSÐSÈ 3¨¢9 9�
˜3”�°+ÀÑ2CÐSÐSÐSrÖ   )rG  rõ   )rÊ   rŽ  r“  r�   s     @@rÏ   ÚgetGlyphNameManyzTTFont.getGlyphNameManyï  s=   øø€ à×'Ò'Ñ)Ô)ˆ
Ý�*‰oŒoˆØSÐSÐSÐSÐSÈsÐSÑSÔSÐSrÖ   r}  c                óî   — 	 |                       ¦   «         |         S # t          $ rN |dd…         dk    r>	 t          |dd…         ¦  «        cY S # t          t          f$ r t          |¦  «        ‚w xY w‚ w xY w)z0Returns the ID of the glyph with the given name.Né   Úglyph)ÚgetReverseGlyphMapr†  r¬   Ú	NameErrorÚ
ValueError)rÊ   r}  s     rÏ   Ú
getGlyphIDzTTFont.getGlyphIDõ  sž   € ð	Ø×*Ò*Ñ,Ô,¨YÔ7Ð7øÝð 	ð 	ð 	Ø˜˜!˜Œ} Ò'Ð'ð.Ý˜y¨¨¨œ}Ñ-Ô-Ð-Ð-Ð-øÝ!¥:Ð.ð .ð .ð .Ý" 9Ñ-Ô-Ð-ð.øøøàð	øøøs    ‚ œA4µAÁA4Á!A/Á/A4úSequence[str]ú	list[int]c                ó–   ‡‡— |                       ¦   «         Š	 ˆfd„|D ¦   «         S # t          $ r | j        Šˆfd„|D ¦   «         cY S w xY w)z8Converts a list of glyph names into a list of glyph IDs.c                ó    •— g | ]
}‰|         ‘ŒS rÓ   rÓ   )r  r}  Úds     €rÏ   r  z)TTFont.getGlyphIDMany.<locals>.<listcomp>  s   ø€ Ð6Ð6Ð6 Y�A�i”LÐ6Ð6Ð6rÖ   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS rÓ   rÓ   )r  r}  r›  s     €rÏ   r  z)TTFont.getGlyphIDMany.<locals>.<listcomp>  s#   ø€ Ð?Ð?Ð?¨i�J�J˜yÑ)Ô)Ð?Ð?Ð?rÖ   )r˜  r†  r›  )rÊ   rŽ  r   r›  s     @@rÏ   ÚgetGlyphIDManyzTTFont.getGlyphIDMany  s{   øø€ à×#Ò#Ñ%Ô%ˆð	@Ø6Ð6Ð6Ð6°#Ð6Ñ6Ô6Ð6øÝð 	@ð 	@ð 	@ØœˆJØ?Ð?Ð?Ð?¸3Ð?Ñ?Ô?Ð?Ð?Ð?ð	@øøøs   ˜& ¦AÁAÚrebuildc                ó\   — |st          | d¦  «        s|                      ¦   «          | j        S )z.Returns a mapping of glyph names to glyph IDs.rŸ   )rÁ   Ú_buildReverseGlyphOrderDictrŸ   )rÊ   r£  s     rÏ   r˜  zTTFont.getReverseGlyphMap
  s7   € àð 	/�' $Ð(@ÑAÔAð 	/Ø×,Ò,Ñ.Ô.Ð.ØÔ*Ð*rÖ   c                óp   — i x| _         }t          |                      ¦   «         ¦  «        D ]
\  }}|||<   Œ|S rÒ   )rŸ   ru  rG  )rÊ   r   rŠ  r}  s       rÏ   r¥  z"TTFont._buildReverseGlyphOrderDict  sG   € Ø*,Ð,ˆÔ# aÝ"+¨D×,>Ò,>Ñ,@Ô,@Ñ"AÔ"Að 	#ð 	#ÑˆG�YØ"ˆAˆi‰LˆLØˆrÖ   r   rû   úlist[str | bytes]c                ó6  — ||v rdS t          |¦  «        }|j        D ]8}||vr2|| v r|                      ||||¦  «         Œ#|                     |¦  «         Œ9|                     |¦  «         |                      |¦  «        }|�Y|                     t          |¦  «        |f¦  «        }|�3t                               d|¦  «         | 	                    ||¦  «         dS t                               d|¦  «         |||<   |�||         |t          |¦  «        |f<   dS dS )zcInternal helper function for self.save(). Keeps track of
        inter-table dependencies.
        Nzreusing '%s' tablezWriting '%s' table to disk)
r‹  Údependenciesrö   rS  ÚgetTableDatar½   r   r9  rŠ  ÚsetEntry)	rÊ   rü   rú   rû   rð   r‘  ÚmasterTableÚ	tabledataÚentrys	            rÏ   rö   zTTFont._writeTable  s=  € ð �$ˆ;ˆ;ØˆFÝ" 3Ñ'Ô'ˆ
Ø%Ô2ð 	-ð 	-ˆKØ $Ð&Ð&Ø $Ð&Ð&Ø×$Ò$ [°&¸$À
ÑKÔKÐKÐKà—K’K Ñ,Ô,Ð,øØ�Š�CÑÔÐØ×%Ò% cÑ*Ô*ˆ	ØÐ!Ø—N’N¥C¨¡H¤H¨iÐ#8Ñ9Ô9ˆEØÐ Ý—	’	Ð.°Ñ4Ô4Ð4Ø—’  UÑ+Ô+Ð+Ø�Ý�	Š	Ð.°Ñ4Ô4Ð4Øˆˆs‰ØÐ!Ø06°s´ˆJ�˜C™œ )Ð,Ñ-Ð-Ð-ð "Ð!rÖ   Úbytesc                óN  — t          |¦  «        }|                      |¦  «        r;t                               d|¦  «         | j        |                              | ¦  «        S | j        r1|| j        v r(t                               d|¦  «         | j        |         S t          |¦  «        ‚)a  Returns the binary representation of a table.

        If the table is currently loaded and in memory, the data is compiled to
        binary and returned; if it is not currently loaded, the binary data is
        read from the font file and returned.
        zCompiling '%s' tabler‰  )r   rN  r9  rŠ  r�   ÚcompilerŽ   r†  rM  s     rÏ   rª  zTTFont.getTableData6  s—   € õ �#‰hŒhˆØ�=Š=˜ÑÔð 	 Ý�IŠIÐ,¨cÑ2Ô2Ð2Ø”;˜sÔ#×+Ò+¨DÑ1Ô1Ð1ØŒ[ð 	 ˜S D¤KÐ/Ð/Ý�IŠIÐ4°cÑ:Ô:Ð:Ø”;˜sÔ#Ð#å˜3‘-”-ÐrÖ   Ú	preferCFFÚlocationúMapping[str, _NumberT] | NoneÚ
normalizedÚrecalcBoundsr   c                ó  — |rd| vrd}|r|s|                       |¦  «        }d}d| v rdnd}|| v }d| v sd| v r|s|st          | |¦  «        }n%|rt          | |||¬¦  «        }nt          d¦  «        ‚d	| v rt	          | ||¦  «        }|S )
aÏ  Return a generic GlyphSet, which is a dict-like object
        mapping glyph names to glyph objects. The returned glyph objects
        have a ``.draw()`` method that supports the Pen protocol, and will
        have an attribute named 'width'.

        If the font is CFF-based, the outlines will be taken from the ``CFF ``
        or ``CFF2`` tables. Otherwise the outlines will be taken from the
        ``GLYF`` or ``glyf`` table.

        If the font contains both a ``CFF ``/``CFF2`` and a ``GLYF``/``glyf``
        table, you can use the ``preferCFF`` argument to specify which one
        should be taken. If the font contains both a ``CFF `` and a ``CFF2``
        table, the latter is taken. If the font contains both a ``GLYF`` and a
        ``glyf`` table, the former is taken.

        If the ``location`` parameter is set, it should be a dictionary mapping
        four-letter variation tags to their float values, and the returned
        glyph-set will represent an instance of a variable font at that
        location.

        If the ``normalized`` variable is set to True, that location is
        interpreted as in the normalized (-1..+1) space, otherwise it is in the
        font's defined axes space.
        ÚfvarNr8  r7  r]  ÚCFF2)r¶  zFont contains no outlinesÚVARC)ÚnormalizeLocationr   r   r   r   )rÊ   r²  r³  rµ  r¶  ÚglyphSetÚglyfTagÚhasGlyfs           rÏ   ÚgetGlyphSetzTTFont.getGlyphSetG  sÝ   € ð> ð 	˜ dÐ*Ð*ØˆHØð 	8˜Jð 	8Ø×-Ò-¨hÑ7Ô7ˆHØˆØ" d˜N˜N�&�&°ˆØ˜T�/ˆØ�dˆNˆN˜f¨˜n˜n°9˜nÀG˜nÝ% d¨HÑ5Ô5ˆHˆHØð 	:Ý&Ø�h °lðñ ô ˆHˆHõ Ð8Ñ9Ô9Ð9Ø�Tˆ>ˆ>Ý& t¨X°xÑ@Ô@ˆHØˆrÖ   úMapping[str, float]údict[str, float]c                óÄ   — ddl m} d| vrt          d¦  «        ‚| d                              ¦   «         } |||¦  «        }d| v r| d                              || ¦  «        }|S )a—  Normalize a ``location`` from the font's defined axes space (also
        known as user space) into the normalized (-1..+1) space. It applies
        ``avar`` mapping if the font contains an ``avar`` table.

        The ``location`` parameter should be a dictionary mapping four-letter
        variation tags to their float values.

        Raises ``TTLibError`` if the font is not a variable font.
        r   )r»  r¸  zNot a variable fontÚavar)ÚfontTools.varLib.modelsr»  r   ÚgetAxesÚrenormalizeLocation)rÊ   r³  r»  Úaxess       rÏ   r»  zTTFont.normalizeLocationy  s~   € ð 	>Ð=Ð=Ð=Ð=Ð=à˜ÐÐÝÐ2Ñ3Ô3Ð3à�FŒ|×#Ò#Ñ%Ô%ˆØ$Ð$ X¨tÑ4Ô4ˆØ�Tˆ>ˆ>Ø˜F”|×7Ò7¸À$ÑGÔGˆHØˆrÖ   ©)é   é
   )r   é   )r   é   )rÉ  r¶   )r   rÉ  )r   r  )r   r¶   )r   r   ÚcmapPreferencesúSequence[tuple[int, int]]údict[int, str] | Nonec                ó   ‡— d| v r| d                               |¬¦  «        nd}d| v r| d                               |¬¦  «        nd}|€|S |r:|                      ¦   «         d         Šˆfd„|                     ¦   «         D ¦   «         }|€|S i |¥|¥S )a.  Returns the effective 'best' Unicode character map for the font,
        or ``None`` if neither cmap nor DMAP has a Unicode subtable.

        By default it will search for the following (platformID, platEncID)
        pairs in order::

                        (3, 10), # Windows Unicode full repertoire
                        (0, 6),  # Unicode full repertoire (format 13 subtable)
                        (0, 4),  # Unicode 2.0 full repertoire
                        (3, 1),  # Windows Unicode BMP
                        (0, 3),  # Unicode 2.0 BMP
                        (0, 2),  # Unicode ISO/IEC 10646
                        (0, 1),  # Unicode 1.1
                        (0, 0)   # Unicode 1.0

        This particular order matches what HarfBuzz uses to choose what
        subtable to use by default. This order prefers the largest-repertoire
        subtable, and among those, prefers the Windows-platform over the
        Unicode-platform as the former has wider support.

        This order can be customized via the ``cmapPreferences`` argument.
        ri  )rÍ  Nrj  r   c                ó(   •— i | ]\  }}|‰k    ¯||“ŒS rÓ   rÓ   )r  ÚuÚgÚ
glyph_zeros      €rÏ   ú
<dictcomp>z&TTFont.getBestCmap.<locals>.<dictcomp>À  s$   ø€ ÐEÐEÐE™T˜Q °Q¸*²_°_�A�q°_°_°_rÖ   )ÚgetBestCmaprG  rs  )rÊ   rÍ  ri  ÚdmaprÔ  s       @rÏ   rÖ  zTTFont.getBestCmapŽ  sÊ   ø€ ðJ ˜ˆ~ˆ~ð �ŒL×$Ò$°_Ð$ÑEÔEÐEàð 	ð ˜ˆ~ˆ~ð �ŒL×$Ò$°_Ð$ÑEÔEÐEàð 	ð
 ˆ<ØˆKØð 	Fà×+Ò+Ñ-Ô-¨aÔ0ˆJØEÐEÐEÐE T§Z¢Z¡\¤\ÐEÑEÔEˆDØˆ<ØˆKØ�$Ð˜$ÐÐrÖ   Únew_glyph_orderc                ó*   — ddl m }  || |¦  «         d S )Nr¶   ©ÚreorderGlyphsrÚ  )rÊ   rØ  rÛ  s      rÏ   rÛ  zTTFont.reorderGlyphsÅ  s,   € Ø0Ð0Ð0Ð0Ð0Ð0àˆ�d˜OÑ,Ô,Ð,Ð,Ð,rÖ   )"r§   r¨   r©   rª   r�   r�   r’   r‘   r«   r¬   r¤   r•   r˜   r—   r­   r   rš   r—   r™   r—   r®   r¬   r–   r•   r¥   r•   r¡   r    r›   r¯   r°   r—   r±   r²   )r±   r#   )r×   rØ   rÙ   rÚ   rÛ   rÜ   r±   r²   )r±   r²   )T)r§   rà   rá   r•   r±   r²   rÒ   )r§   r   rð   rñ   r±   r—   )r
  )r  r  r  r�   r  r  r±   r²   )TNNNFFTr  )rú   r  rÿ   r—   r¥   r•   r�   r   r  r  r  r—   r  r—   r¢   r—   r£   r�   r±   r²   ©NF)
rú   r  rü   r4  r¥   r•   r  r—   r±   r²   )r  rà   r¥   r•   r±   r²   )rü   r4  r±   r—   )r±   rœ   )rW  r•   r±   r²   )r±   r¬   )rü   r\  r±   r]  )rü   ra  r±   rb  )rü   rd  r±   re  )rü   rg  r±   rh  )rü   rk  r±   rl  )rü   rn  r±   ro  )rü   rq  r±   rr  )rü   rt  r±   ru  )rü   rw  r±   rx  )rü   rz  r±   r{  )rü   r}  r±   r~  )rü   r€  r±   r�  )rü   rƒ  r±   r„  )rü   r†  r±   r‡  )rü   r‰  r±   rŠ  )rü   rŒ  r±   r�  )rü   r�  r±   r�  )rü   r’  r±   r“  )rü   r•  r±   r–  )rü   r˜  r±   r™  )rü   r›  r±   rœ  )rü   rž  r±   rŸ  )rü   r¡  r±   r¢  )rü   r¤  r±   r¥  )rü   r§  r±   r¨  )rü   rª  r±   r«  )rü   r­  r±   r®  )rü   r°  r±   r±  )rü   r³  r±   r´  )rü   r¶  r±   r·  )rü   r¹  r±   rº  )rü   r¼  r±   r½  )rü   r¿  r±   rÀ  )rü   rÂ  r±   rÃ  )rü   rÅ  r±   rÆ  )rü   rÈ  r±   rÉ  )rü   rË  r±   rÌ  )rü   rÎ  r±   rÏ  )rü   rÑ  r±   rÒ  )rü   rÔ  r±   rÕ  )rü   r×  r±   rØ  )rü   rÚ  r±   rÛ  )rü   rÝ  r±   rÞ  )rü   rà  r±   rá  )rü   rã  r±   rä  )rü   ræ  r±   rç  )rü   ré  r±   rê  )rü   rì  r±   rí  )rü   rï  r±   rð  )rü   rò  r±   ró  )rü   rõ  r±   rö  )rü   rø  r±   rù  )rü   rû  r±   rü  )rü   rþ  r±   rÿ  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r
  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r   )rü   r"  r±   r#  )rü   r%  r±   r&  )rü   r(  r±   r)  )rü   r+  r±   r,  )rü   r.  r±   r/  )rü   r1  r±   r2  )rü   r4  r±   r5  )rü   r7  r±   r8  )rü   r:  r±   r;  )rü   r=  r±   r>  )rü   r@  r±   rA  )rü   rC  r±   rD  )rü   rF  r±   rG  )rü   rI  r±   rJ  )rü   rL  r±   rM  )rü   rO  r±   rP  )rü   rR  r±   rS  )rü   rU  r±   rV  )rü   rX  r±   rY  )rü   r[  r±   r\  )rü   r^  r±   r_  )rü   ra  r±   rb  )rü   rd  r±   re  )rü   rg  r±   rh  )rü   rj  r±   rk  )rü   rm  r±   rn  )rü   rp  r±   rq  )rü   rs  r±   rt  )rü   rv  r±   rw  )rü   ry  r±   rz  )rü   r|  r±   r}  )rü   r  r±   rP  )rü   r4  r±   r�  )rü   r   r±   r†   )rü   r4  r>  r†   r±   r²   ©rü   r4  r±   r²   )rü   r\  r±   r–  )rü   ra  r±   r™  )rü   rd  r±   r›  )rü   rg  r±   r�  )rü   rk  r±   r   )rü   rn  r±   r¢  )rü   rq  r±   r¤  )rü   rt  r±   r¦  )rü   rw  r±   r¨  )rü   rz  r±   rª  )rü   r}  r±   r¬  )rü   r€  r±   r®  )rü   rƒ  r±   r°  )rü   r†  r±   r²  )rü   r‰  r±   r´  )rü   rŒ  r±   r¶  )rü   r�  r±   r¸  )rü   r’  r±   rº  )rü   r•  r±   r¼  )rü   r˜  r±   r¾  )rü   r›  r±   rÀ  )rü   rž  r±   rÂ  )rü   r¡  r±   rÄ  )rü   r¤  r±   rÆ  )rü   r§  r±   rÈ  )rü   rª  r±   rÊ  )rü   r­  r±   rÌ  )rü   r°  r±   rÎ  )rü   r³  r±   rÐ  )rü   r¶  r±   rÒ  )rü   r¹  r±   rÔ  )rü   r¼  r±   rÖ  )rü   r¿  r±   rØ  )rü   rÂ  r±   rÚ  )rü   rÅ  r±   rÜ  )rü   rÈ  r±   rÞ  )rü   rË  r±   rà  )rü   rÎ  r±   râ  )rü   rÑ  r±   rä  )rü   rÔ  r±   ræ  )rü   r×  r±   rè  )rü   rÚ  r±   rê  )rü   rÝ  r±   rì  )rü   rà  r±   rî  )rü   rã  r±   rð  )rü   ræ  r±   rò  )rü   ré  r±   rô  )rü   rì  r±   rö  )rü   rï  r±   rø  )rü   rò  r±   rú  )rü   rõ  r±   rü  )rü   rø  r±   rþ  )rü   rû  r±   r   )rü   rþ  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r
  r±   r
  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r  r±   r  )rü   r"  r±   r  )rü   r%  r±   r  )rü   r(  r±   r  )rü   r+  r±   r  )rü   r.  r±   r  )rü   r1  r±   r  )rü   r4  r±   r   )rü   r7  r±   r"  )rü   r:  r±   r$  )rü   r=  r±   r&  )rü   r@  r±   r(  )rü   rC  r±   r*  )rü   rF  r±   r,  )rü   rI  r±   r.  )rü   rL  r±   r0  )rü   rO  r±   r2  )rü   rR  r±   r4  )rü   rU  r±   r6  )rü   rX  r±   r8  )rü   r[  r±   r:  )rü   r^  r±   r<  )rü   ra  r±   r>  )rü   rd  r±   r@  )rü   rg  r±   rB  )rü   rj  r±   rD  )rü   rm  r±   rF  )rü   rp  r±   rH  )rü   rs  r±   rJ  )rü   rv  r±   rL  )rü   ry  r±   rN  )rü   r|  r±   rP  )rü   r4  r±   rS  )rü   r4  rU  r‡   r±   rV  )rü   r4  rU  r“   r±   rS  )r�   rœ   r±   r²   )r±   r—   )rz  r¬   r±   r�   )rŠ  r¬   r±   r�   )rŽ  r�  r±   rœ   )r}  r�   r±   r¬   )rŽ  rœ  r±   r�  )F)r£  r—   r±   rž   )r±   rž   )
rü   r4  rú   r   rû   r§  rð   r    r±   r²   )rü   r4  r±   r¯  )TNFT)
r²  r—   r³  r´  rµ  r—   r¶  r—   r±   r   )r³  rÀ  r±   rÁ  )rÈ  )rÍ  rÎ  r±   rÏ  )rØ  rœ   r±   r²   )3r  r  r  Ú__doc__r  ÚNotImplementedrÐ   rÕ   rÞ   rÉ   rï   rå   r   r	  r  r  r/  rJ  rN  rQ  Ú__contains__rç   rY  r[  r
   r_  r…  r“  r•  r½   r[  rG  rd  r`  r_  Ústaticmethodrv  r…  r‰  r�  r”  r›  r¢  r˜  r¥  rö   rª  r¿  r»  rÖ  rÛ  rÓ   rÖ   rÏ   rŒ   rŒ   ‹   sô  € € € € € € ðQð Qðf 1Ð0Ð0Ñ0ØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ*Ð*Ð*Ñ*ØGÐGÐGÑGØ!Ð!Ð!Ñ!ØÐÐÑàÐÐÑØÐÐÑð :>Ø.2Ø-Ø!ØØ#Ø!Ø&Ø&+Ø $ØØ Ø!ØNRØ24Ø#ð#b1ñ b1ð b1ð b1ð b1ñHð ð ð ñð ð ð ñð ð ð ð UYñ7ñ 7ð 7ð 7ð 7ðx EIñ'ñ 'ð 'ð 'ð 'ð6#ð #ð #ð #ð #˜9ñ #ô #ð #ð ññ ð ð ð ð* "Ø!Ø/3Ø+/Ø!Ø!Ø(,Ø%*ñBñ Bð Bð Bð BðP "Ø!ñ!ñ !ð !ð !ð !ðH SWññ ð ð ð ñ*"ð "ð "ð "ñ
ð ð ð ð €Lñ%ð %ð %ð %ññ ð ð ð ñ&ð &ð &ð &ð ÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙKÐKÐKñ „XØKØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙKÐKÐKñ „XØKØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙKÐKÐKñ „XØKØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÐOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙKÑKÐKñ „XØKØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙOÑOÐOñ „XØOØÙHÑHÐHñ „XØHØÙMÑMÐMñ „XØMññ ð ð ññ ð ð ñB&ñ &ð &ð &ñ!ñ !ð !ð !ð ÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙJÑJÐJñ „XØJØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙJÑJÐJñ „XØJØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙJÑJÐJñ „XØJØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙJÑJÐJñ „XØJØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙNÑNÐNñ „XØNØÙ@Ñ@Ð@ñ „XØ@ØÙRÑRÐRñ „XØRØñ7ñ 7ð 7ñ „Xð7ð
 7;ññ ñ ð ð ñ4ñ 4ð 4ð 4ñ!ñ !ð !ð !ñF3ñ 3ð 3ð 3ñ,ñ ,ð ,ð ,ñ
E*ñ E*ð E*ð E*ðN ñ%ñ %ð %ñ „\ð%ññ ð ð ñ
<ñ <ð <ð <ñ	)ñ 	)ð 	)ð 	)ñTñ Tð Tð Tñ
ñ 
ð 
ð 
ñ@ñ @ð @ð @ñ+ñ +ñ +ð +ð +ññ ð ð ð NRñ<ñ <ñ <ð <ð <ñ@ ñ  ð  ð  ð& Ø26Ø Ø!ñ0ñ 0ñ 0ð 0ð 0ñdñ ð ð ð.	6
ñ5 ñ 5 ñ 5 ð 5 ð 5 ñn-ñ -ð -ð -ð -ð -rÖ   rŒ   c                  ó,   — e Zd ZdZddd„Zdd„Zdd„ZdS )rP  z†A pseudo table. The glyph order isn't in the font as a separate
    table, but it's nice to present it as such in the TTX format.
    Nrü   r‘   r±   r²   c                ó   — d S rÒ   rÓ   rM  s     rÏ   rÐ   zGlyphOrder.__init__Ð  s   € ØˆrÖ   rú   r  r  rŒ   c                ó  — |                      ¦   «         }|                     d¦  «         |                     ¦   «          t          |¦  «        D ]1\  }}|                     d||¬¦  «         |                     ¦   «          Œ2d S )NzAThe 'id' attribute is only for humans; it is ignored when parsed.ÚGlyphID)Úidr»   )rG  Úcommentr'  ru  r,  )rÊ   rú   r  r�   rn  r}  s         rÏ   r=  zGlyphOrder.toXMLÓ  s‘   € Ø×)Ò)Ñ+Ô+ˆ
Ø�ŠØOñ	
ô 	
ð 	
ð 	�ŠÑÔÐÝ% jÑ1Ô1ð 	ð 	‰LˆAˆyØ×Ò˜Y¨1°9ÐÑ=Ô=Ð=Ø�NŠNÑÔÐÐð	ð 	rÖ   r»   r�   rA  údict[str, str]Úcontentú	list[Any]c                ó´   — t          | d¦  «        sg | _        |dk    r | j                             |d         ¦  «         |                     | j        ¦  «         d S )Nr�   rå  r»   )rÁ   r�   rS  r[  )rÊ   r»   rA  ré  r  s        rÏ   ÚfromXMLzGlyphOrder.fromXMLÝ  s^   € õ �t˜\Ñ*Ô*ð 	!Ø ˆDŒOØ�9ÒÐØŒO×"Ò" 5¨¤=Ñ1Ô1Ð1Ø×Ò˜Tœ_Ñ-Ô-Ð-Ð-Ð-rÖ   rÒ   )rü   r‘   r±   r²   )rú   r  r  rŒ   r±   r²   )
r»   r�   rA  rè  ré  rê  r  rŒ   r±   r²   )r  r  r  rÞ  rÐ   r=  rì  rÓ   rÖ   rÏ   rP  rP  Ë  s_   € € € € € ðð ðð ð ð ð ðð ð ð ð.ð .ð .ð .ð .ð .rÖ   rP  rü   r4  r±   úModuleType | Nonec                óò   — ddl m} t          | ¦  «        }	 t          d|z   ¦  «         t	          ||¦  «        S # t
          $ r3}t          |¦  «                             |¦  «        dk    rY d}~dS |‚d}~ww xY w)z[Fetch the packer/unpacker module for a table.
    Return None when no module is found.
    r¶   rL  zfontTools.ttLib.tables.r   N)rÅ   r�   r+  Ú
__import__ÚgetattrÚImportErrorr�   Úfind)rü   r�   ÚpyTagÚerrs       rÏ   ÚgetTableModulerõ  ç  s    € ð ÐÐÐÐÐå˜CÑ Ô €Eð&ÝÐ,¨uÑ4Ñ5Ô5Ð5õ �v˜uÑ%Ô%Ð%øõ ð ð ð õ
 ˆs‰8Œ8�=Š=˜ÑÔ 1Ò$Ð$Ø�4�4�4�4�4àˆIøøøøðøøøs   —9 ¹
A6Á&A1Á/A1Á1A6z"dict[str | bytes, tuple[str, str]]Ú_customTableRegistryÚ
moduleNamer�   Ú	classNamer‘   r²   c                óF   — |€dt          | ¦  «        z   }||ft          | <   dS )ab  Register a custom packer/unpacker class for a table.

    The 'moduleName' must be an importable module. If no 'className'
    is given, it is derived from the tag, for example it will be
    ``table_C_U_S_T_`` for a 'CUST' tag.

    The registered table class should be a subclass of
    :py:class:`fontTools.ttLib.tables.DefaultTable.DefaultTable`
    NÚtable_)r+  rö  )rü   r÷  rø  s      rÏ   ÚregisterCustomTableClassrû    s2   € ð ÐØ�¨sÑ3Ô3Ñ3ˆ	Ø!+¨YÐ 7Õ˜ÑÐÐrÖ   c                ó   — t           | = dS )z8Unregister the custom packer/unpacker class for a table.N)rö  ©rü   s    rÏ   ÚunregisterCustomTableClassrþ    s   € å˜SÐ!Ð!Ð!rÖ   útype[DefaultTable] | Nonec                óŠ   — | t           vrdS ddl}t           |          \  }}|                     |¦  «        }t          ||¦  «        S )zReturn the custom table class for tag, if one has been registered
    with 'registerCustomTableClass()'. Else return None.
    Nr   )rö  Ú	importlibÚimport_modulerð  )rü   r  r÷  rø  Úmodules        rÏ   ÚgetCustomTableClassr    sS   € ð Õ&Ð&Ð&ØˆtØÐÐÐå0°Ô5Ñ€J�	Ø×$Ò$ ZÑ0Ô0€FÝ�6˜9Ñ%Ô%Ð%rÖ   útype[DefaultTable]c                ó¢   — t          | ¦  «        }|�|S t          | ¦  «        }|€ddlm} |S t	          | ¦  «        }t          |d|z   ¦  «        }|S )z,Fetch the packer/unpacker class for a table.Nr¶   r…   rú  )r  rõ  r;  r†   r+  rð  )rü   r‘  r  r†   ró  s        rÏ   r‹  r‹  &  sl   € å$ SÑ)Ô)€JØÐØÐÝ˜CÑ Ô €FØ€~Ø5Ð5Ð5Ð5Ð5Ð5àÐÝ˜CÑ Ô €EÝ˜ ¨EÑ!1Ñ2Ô2€JØÐrÖ   Úklassc                ób   — | j         }|dd…         dk    sJ ‚|dd…         }t          |¦  «        S )z'Fetch the table tag for a class object.NrË  rú  )r  ÚidentifierToTag)r  r»   s     rÏ   ÚgetClassTagr
  5  s=   € àŒ>€DØ���Œ8�xÒÐÐÐØ���Œ8€DÝ˜4Ñ Ô Ð rÖ   r†   c                ó6   — t          | ¦  «        } || ¦  «        S )z!Return a new instance of a table.)r‹  )rü   r‘  s     rÏ   ÚnewTabler  =  s   € å˜sÑ#Ô#€JØˆ:�c‰?Œ?ÐrÖ   Úcc                ó¾   — ddl }|                     d| ¦  «        rd| z   S |                     d| ¦  «        r| dz   S t          t          | ¦  «        ¦  «        dd…         S )z%Helper function for tagToIdentifier()r   Nz[a-z0-9]Ú_z[A-Z]r  )ÚreÚmatchÚhexr   )r  r  s     rÏ   Ú_escapecharr  C  sd   € à€I€I€Ià	‡x‚x�
˜AÑÔð #Ø�Q‰wˆØ	�Š�'˜1Ñ	Ô	ð #Ø�3‰wˆå•7˜1‘:”:‰Œ˜q˜r˜rÔ"Ð"rÖ   c                ón  — ddl }t          | ¦  «        } | dk    r| S t          | ¦  «        dk    s
J d¦   «         ‚t          | ¦  «        dk    r5| d         dk    r)| dd…         } t          | ¦  «        dk    r| d         dk    °)d	}| D ]}|t          |¦  «        z   }Œ|                     d
|¦  «        rd|z   }|S )aÐ  Convert a table tag to a valid (but UGLY) python identifier,
    as well as a filename that's guaranteed to be unique even on a
    caseless file system. Each character is mapped to two characters.
    Lowercase letters get an underscore before the letter, uppercase
    letters get an underscore after the letter. Trailing spaces are
    trimmed. Illegal characters are escaped as two hex bytes. If the
    result starts with a number (as the result of a hex escape), an
    extra underscore is prepended. Examples:
    .. code-block:: pycon

        >>>
        >> tagToIdentifier('glyf')
        '_g_l_y_f'
        >> tagToIdentifier('cvt ')
        '_c_v_t'
        >> tagToIdentifier('OS/2')
        'O_S_2f_2'
    r   NrP  rÌ  ztag should be 4 characters longr¶   r¦   ú rÅ   z[0-9]r  )r  r   rõ   r  r  )rü   r  Úidentr  s       rÏ   r+  r+  O  sÑ   € ð& €I€I€Iå
ˆc‰(Œ(€CØ
ˆlÒÐØˆ
Ýˆs‰8Œ8�qŠ=ˆ=ˆ=Ð;‰=Œ=ˆ=Ý
ˆc‰(Œ(�QŠ,ˆ,˜3˜rœ7 cš>˜>Ø�#�2�#Œhˆõ ˆc‰(Œ(�QŠ,ˆ,˜3˜rœ7 cš>˜>à€EØð 'ð 'ˆØ� A™œÑ&ˆˆØ	‡x‚x�˜ÑÔð Ø�e‘ˆØ€LrÖ   r  c           
     óà  — | dk    r| S t          | ¦  «        dz  r| d         dk    r
| dd…         } t          | ¦  «        dz  rJ ‚d}t          dt          | ¦  «        d¦  «        D ]c}| |         dk    r|| |dz            z   }Œ| |dz            dk    r|| |         z   }Œ8|t          t          | ||dz   …         d¦  «        ¦  «        z   }Œd|d	t          |¦  «        z
  d
z  z   }t	          |¦  «        S )z!the opposite of tagToIdentifier()rP  r  r   r  r¶   NrÅ   é   rÌ  r  )rõ   ro  Úchrr¬   r   )r  rü   rn  s      rÏ   r	  r	  r  s  € à�ÒÐØˆÝ
ˆ5�z„z�A�~ð ˜% œ( cš/˜/Ø�a�b�b”	ˆÝ�E‘
”
˜Q‘ÐÐÐØ
€CÝ�1•c˜%‘j”j !Ñ$Ô$ð 7ð 7ˆØ�Œ8�sŠ?ˆ?Ø˜˜a !™eœÑ$ˆCˆCØ�1�q‘5Œ\˜SÒ Ð Ø˜˜aœ‘.ˆCˆCð ��C  a¨!¨a©% iÔ 0°"Ñ5Ô5Ñ6Ô6Ñ6ˆCˆCà
�•S˜‘X”X‘ Ñ$Ñ
$€CÝˆs‰8Œ8€OrÖ   c                óº   — ddl }t          | ¦  «        } | dk    rdS | dk    r| S |                     d| ¦  «        r|                      ¦   «         S t	          | ¦  «        S )zºSimilarly to tagToIdentifier(), this converts a TT tag
    to a valid XML element name. Since XML element names are
    case sensitive, this is a fairly simple/readable translation.
    r   NúOS/2ÚOS_2rP  z[A-Za-z_][A-Za-z_0-9]* *$)r  r   r  Ústripr+  )rü   r  s     rÏ   r-  r-  ‡  si   € ð
 €I€I€Iå
ˆc‰(Œ(€CØ
ˆf‚}€}ØˆvØ	�Ò	Ð	Øˆ
Ø	‡x‚xÐ+¨SÑ1Ô1ð $Ø�yŠy‰{Œ{Ðå˜sÑ#Ô#Ð#rÖ   c                óº   — | dk    rt          d¦  «        S t          | ¦  «        dk    rt          | ¦  «        S t          | ddt          | ¦  «        z
  z  z   ¦  «        S )zThe opposite of tagToXML()r  r  é   r  rÌ  )r   rõ   r	  rý  s    rÏ   ÚxmlToTagr   ™  sV   € à
ˆf‚}€}Ý�6‰{Œ{ÐÝ
ˆ3�x„x�1‚}€}Ý˜sÑ#Ô#Ð#å�3˜ ¥C¨¡H¤H¡Ñ-Ñ-Ñ.Ô.Ð.rÖ   )ró   ÚhhearD  r  ÚhmtxÚLTSHÚVDMXÚhdmxrj  ri  ÚfpgmÚprepzcvt Úlocar7  Úkernr»   rE  ÚgaspÚPCLT)	ró   r!  rD  r  r»   rj  ri  rE  r]  ÚtagListrœ  rí   r  rœ   c                ó>  — t          | ¦  «        } |€Ad| v r*|                      d¦  «         |                      d¦  «         d| v rt          }nt          }g }|D ]0}|| v r*|                     |¦  «         |                      |¦  «         Œ1|                     | ¦  «         |S )zÅReturn a sorted copy of tagList, sorted according to the OpenType
    specification, or according to a custom tableOrder. If given and not
    None, tableOrder needs to be a list of tag names.
    NÚDSIGr]  )rƒ  rT  rS  ÚOTFTableOrderÚTTFTableOrderÚextend)r,  rí   ÚorderedTablesrü   s       rÏ   rU  rU  È  s¹   € õ �W‰oŒo€GØÐØ�WÐÐà�NŠN˜6Ñ"Ô"Ð"Ø�NŠN˜6Ñ"Ô"Ð"Ø�WÐÐÝ&ˆJˆJå&ˆJØ€MØð  ð  ˆØ�'ˆ>ˆ>Ø× Ò  Ñ%Ô%Ð%Ø�NŠN˜3ÑÔÐøØ×Ò˜Ñ!Ô!Ð!ØÐrÖ   FÚinFiler   ÚoutFiler«   r—   c                óŠ  — |                       d¦  «         |                      d¦  «         t          | |¬¦  «        }t          |t          |j        ¦  «        |j        |j        |j        ¦  «        }t          | 	                    ¦   «         ¦  «        }t          ||¦  «        D ]}||         ||<   Œ|                     ¦   «          dS )zcRewrite a font file, ordering the tables as recommended by the
    OpenType specification 1.4.
    r   )r«   N)rº   r   r   rõ   r�   r�   r’   r”   ræ   rç   rU  rÉ   )r3  r4  rí   r«   rŽ   rú   r�   rü   s           rÏ   ré   ré   â  s´   € ð ‡K‚K��N„N€NØ‡L‚L��O„O€OÝ˜¨~Ð>Ñ>Ô>€FÝØÝˆFŒMÑÔØÔØŒØÔñô €Fõ �&—+’+‘-”-Ñ Ô €FÝ˜V ZÑ0Ô0ð "ð "ˆØ˜S”kˆˆs‰ˆØ
‡L‚L�N„N€N€N€NrÖ   Úxr¬   c                óH   — d}| r| dz	  } |dz   }| °t          |dz
  d¦  «        S )z_Return the highest exponent of two, so that
    (2 ** exponent) <= x.  Return 0 if x is 0.
    r   r¶   )Úmax)r6  Úexponents     rÏ   ÚmaxPowerOfTwor:  û  sC   € ð €HØ
ð  Ø�‰FˆØ˜a‘<ˆð ð  õ ˆx˜!‰|˜QÑÔÐrÖ   r  ÚnÚitemSizeútuple[int, int, int]c                ój   — t          | ¦  «        }d|z  |z  }|}t          d| |z  |z
  ¦  «        }|||fS )z1Calculate searchRange, entrySelector, rangeShift.r  r   )r:  r8  )r;  r<  r9  ÚsearchRangeÚentrySelectorÚ
rangeShifts         rÏ   ÚgetSearchRangerB    sI   € õ ˜QÑÔ€HØ�h‘; (Ñ*€KØ€MÝ�Q˜˜H™ {Ñ2Ñ3Ô3€JØ˜ zÐ1Ð1rÖ   )rü   r4  r±   rí  rÒ   )rü   r4  r÷  r�   rø  r‘   r±   r²   rÝ  )rü   r4  r±   rÿ  )rü   r4  r±   r  )r  r  r±   r4  )rü   r4  r±   r†   )r  r�   r±   r�   )rü   r4  r±   r�   )r  r�   r±   r�   )rü   r�   r±   r�   )r,  rœ  rí   r  r±   rœ   rÜ  )
r3  r   r4  r   rí   r  r«   r—   r±   r²   )r6  r¬   r±   r¬   )r  )r;  r¬   r<  r¬   r±   r=  )³Ú
__future__r   ÚloggingrÂ   rÛ   Úior   r   r   Útypingr   r   r	   r
   ÚfontTools.configr   rH  r   ÚfontTools.misc.configToolsr   ÚfontTools.misc.loggingToolsr   ÚfontTools.misc.textToolsr   r   r   ÚfontTools.ttLibr   ÚfontTools.ttLib.sfntr   r   ÚfontTools.ttLib.ttGlyphSetr   r   r   r   r   Úcollections.abcr   r   Útypesr   r   r   r   r    r!   r"   Útyping_extensionsr#   r$   ÚfontTools.ttLib.tablesr%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   Ú#fontTools.ttLib.tables.DefaultTabler†   r‡   Ú	getLoggerr  r9  Úfloatr‰   ÚobjectrŒ   rP  rõ  rö  r  rû  rþ  r  r‹  r
  r  r  r+  r	  r-  r   r0  r/  rU  ré   r:  rB  rÓ   rÖ   rÏ   ú<module>rV     s¿  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >à #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø &Ð &Ð &Ð &Ð &Ð &Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð k/Ø7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?à.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ðað að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að að aðD AÐ@Ð@Ð@Ð@Ð@àˆW�X¨Ð.Ñ.Ô.€Fà€gÔ˜Ñ!Ô!€ð ˆ7�: UÐ+Ñ+Ô+€ð}-ð }-ð }-ð }-ð }-ˆVñ }-ô }-ð }-ð@*.ð .ð .ð .ð .�ñ .ô .ð .ð8&ð &ð &ð &ð2 <>Ð Ð =Ð =Ð =Ñ =ð @Dð8ð 8ð 8ð 8ð 8ð""ð "ð "ð "ð

&ð 
&ð 
&ð 
&ðð ð ð ð!ð !ð !ð !ðð ð ð ð	#ð 	#ð 	#ð 	#ð ð  ð  ð  ðFð ð ð ð*$ð $ð $ð $ð$/ð /ð /ð /ðð ð €ð.
ð 
ð 
€ð @Dðð ð ð ð ð: (,Ø ð	ð ð ð ð ð2 ð  ð  ð  ð2ð 2ð 2ð 2ð 2ð 2ð 2rÖ   