ot2kpx - extract kerning information from OpenType fonts
Contents
Copyright
Copyright (C) 2005-2025 Marc Penninga.
Description
ot2kpx extract the kerning data from OpenType fonts and prints it to "stdout", either in Adobe's KPX
format (for adding to an afm file) or as a Luatex custom feature, for use with the "\directlua" command.
Disclaimer
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
License
This program is free software; you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation, either version 2 of the License, or
(at your option) any later version. A copy of the GNU General Public License is included with ot2kpx;
see the file GPLv2.txt.
Name
ot2kpx - extract kerning information from OpenType fonts
Options And Arguments
-help
Print a short help text and exit.
-version
Print ot2kpx's version and exit.
-afm, -kpx
Output the kerning data in Adobe's KPX format, as used in afm files. This is the default output
format.
-lua
Output the kerning data as a Luatex custom font feature, to be included in a "\directlua" command.
<fontfile>
The OpenType font (both otf and ttf format are supported).
Recent Changes
(See the source code for the rest of the story.)
2019-05-20 Added the -version option.
2019-04-15 Added the -lua command-line option to get output in Luatex's custom feature format.
fontools 2025-01-07 OT2KPX(1)
Restrictions
-ot2kpx doesn't implement all of the OpenType specification. Things that are missing include: support
for font files containing multiple fonts, LookupTables with LookupTypes other than 2, "kern" tables
with format other than 0 and ValueRecords with other types of data than just XAdvance data.
Most of these limitations won't matter, since the missing features are rare (the only fonts I know of
that use them are the non-western fonts that come with Adobe Reader). Furthermore, many of these
features define (according to the OpenType specification) "subtle,device-dependentadjustmentsatspecificfontsizesordeviceresolutions"; since there's no way to express such adjustments in afm
format, ignoring them seems to be the only option anyway.
-ot2kpx collects kerning data first from the "kern" table, then from all LookupTables associated with
the "kern" feature; if a kerning pair occurs multiple times, the first value seen is chosen. There
are (or may be) several issues with this approach:
- The OpenType specification says that fonts in otf format shouldn't use the "kern" table at all,
just the lookups from the "GPOS" table. Many such fonts do, however, contain a "kern" table, but
no "GPOS" table; so we use the "kern" table anyway.
- Instead of reading all LookupTables, it might be better to let the user specify a script and
language and process only the LookupTables for those values. However, at least in the fonts I
checked, all script/language combinations eventually point to the same "kern" LookupTables, so
this approach wouldn't make any difference (apart from further complicating the code).
Synopsis
ot2kpx [ -afm | -kpx | -lua ] <fontfile>
Version
This document describes ot2kpx version 20250107.
