fonttools/Doc/source/ttLib/tables.rst
2024-12-04 16:03:40 +00:00

210 lines
5.2 KiB
ReStructuredText

#######################################
tables: Access TrueType/OpenType tables
#######################################
.. contents:: On this page
:local:
.. rubric:: Overview
:heading-level: 2
This folder is a subpackage of :py:mod:`fontTools.ttLib`. Each module here is a
specialized TrueType/OpenType table converter: they can convert raw data
to Python objects and vice versa. Usually you do not need to
use these modules directly: they are imported and used
automatically when needed by :py:mod:`fontTools.ttLib`.
In addition to the tables defined in the official TrueType/OpenType
specification documents, several specialty tables are supported that
are used by specific vendors (including the Graphite shaping engine
and Apple's AAT). Note that fontTools supports the tables that provide
the core functionality of AAT, but does not guarantee everything.
Similarly, fontTools supports some third-party tables used by external
applications (such as FontForge and Microsoft's VTT), but may not
support every private table employed by those applications.
Accessing tables
----------------
The Python modules representing the tables have pretty strange names: this is due to the
fact that we need to map TT/OT table tags (which are case sensitive)
to filenames (which on macOS and Windows are not case sensitive) as well
as to Python identifiers. The latter means that each table identifier
can only contain ``[A-Za-z0-9_]`` and cannot start with a number.
The convention adopted is that capital letters in a table tag are
transformed into the letter followed by an underscore (e.g., ``A_``), while lowercase
letters and numbers are preceded by an underscore (e.g., ``_a``).
:py:mod:`fontTools.ttLib` provides functions to expand a tag into the format used here::
>>> from fontTools import ttLib
>>> ttLib.tagToIdentifier("FOO ")
'F_O_O_'
>>> ttLib.tagToIdentifier("cvt ")
'_c_v_t'
>>> ttLib.tagToIdentifier("OS/2")
'O_S_2f_2'
>>> ttLib.tagToIdentifier("glyf")
'_g_l_y_f'
>>>
And vice versa::
>>> ttLib.identifierToTag("F_O_O_")
'FOO '
>>> ttLib.identifierToTag("_c_v_t")
'cvt '
>>> ttLib.identifierToTag("O_S_2f_2")
'OS/2'
>>> ttLib.identifierToTag("_g_l_y_f")
'glyf'
>>>
Eg. the 'glyf' table converter lives in a Python file called::
_g_l_y_f.py
The converter itself is a class, named ``table_`` + expandedtag. Eg::
class table__g_l_y_f:
etc.
Note that if you _do_ need to use such modules or classes manually,
there are two convenient API functions that let you find them by tag::
>>> ttLib.getTableModule('glyf')
<module 'ttLib.tables._g_l_y_f'>
>>> ttLib.getTableClass('glyf')
<class ttLib.tables._g_l_y_f.table__g_l_y_f at 645f400>
>>
Helper modules
--------------
In addition to the core table-conversion implementations, a set of
helper and utility modules is also found in this package.
You should not normally need to access these modules directly,
but consulting them might be valuable if you need to add fontTools
support for a new table type.
In that case, a good place to start is with the documentation for
the base table classes:
.. toctree::
:maxdepth: 1
tables/table_api
The modules that provide lower-level helper functionality
include implementations of common OpenType data structures, support
for OpenType font variations, and various classes needed for
tables containing bitmap data or for tables used by the Graphite engine:
.. toctree::
:maxdepth: 1
tables/OpenType_related
tables/TupleVariation
tables/Bitmap_related
tables/grUtils
A module is also included for assembling and disassembling
TrueType bytecode:
.. toctree::
:maxdepth: 1
tables/ttProgram
Tables currently supported
--------------------------
.. toctree::
:maxdepth: 1
tables/_a_n_k_r
tables/_a_v_a_r
tables/B_A_S_E_
tables/_b_s_l_n
tables/C_B_D_T_
tables/C_B_L_C_
tables/C_F_F_
tables/C_F_F__2
tables/_c_i_d_g
tables/_c_m_a_p
tables/C_O_L_R_
tables/C_P_A_L_
tables/_c_v_a_r
tables/_c_v_t
tables/D_S_I_G_
tables/E_B_D_T_
tables/E_B_L_C_
tables/F__e_a_t
tables/_f_e_a_t
tables/F_F_T_M_
tables/_f_p_g_m
tables/_f_v_a_r
tables/_g_a_s_p
tables/_g_c_i_d
tables/G_D_E_F_
tables/G__l_a_t
tables/G__l_o_c
tables/_g_l_y_f
tables/G_M_A_P_
tables/G_P_K_G_
tables/G_P_O_S_
tables/G_S_U_B_
tables/_g_v_a_r
tables/_h_d_m_x
tables/_h_e_a_d
tables/_h_h_e_a
tables/_h_m_t_x
tables/H_V_A_R_
tables/J_S_T_F_
tables/_k_e_r_n
tables/_l_c_a_r
tables/_l_o_c_a
tables/_l_t_a_g
tables/L_T_S_H_
tables/M_A_T_H_
tables/_m_a_x_p
tables/M_E_T_A_
tables/_m_e_t_a
tables/_m_o_r_t
tables/_m_o_r_x
tables/M_V_A_R_
tables/_n_a_m_e
tables/_o_p_b_d
tables/O_S_2f_2
tables/_p_o_s_t
tables/_p_r_e_p
tables/_p_r_o_p
tables/_s_b_i_x
tables/S__i_l_f
tables/S__i_l_l
tables/S_I_N_G_
tables/S_T_A_T_
tables/S_V_G_
tables/_t_r_a_k
tables/T_T_F_A_
tables/V_D_M_X_
tables/_v_h_e_a
tables/_v_m_t_x
tables/V_O_R_G_
tables/VTT_related
tables/V_V_A_R_
.. automodule:: fontTools.ttLib.tables
:members:
:undoc-members: