On 2013-02-14 at 14:41 Steve White wrote:
> By the way, one thing on the big To Do list has been a subsetting tool.
In case this would be of help, we (in SIL) have been working on a subsetting tool, and it is currently part of our open source FontUtils package (http://scripts.sil.org/fontutils).
Not guaranteeing it is completely free of bugs [yet] but we have used it successfully on our own fonts and invite others to give it a go as well -- and let us know how you get on.
As is the case for the whole FontUtils package, the tools are all command-line, cross-platform, and written in Perl. To help you understand the current ttfsubset command, its "help" message is appended below. And I'll add, because it isn't obvious from the help message, that the tool does actually subset the GPOS, GSUB, and GDEF tables in addition to the more obvious things like the glyf table.
Because FontUtils as a whole is in active development I suggest that interested parties download the Font::TTF and Font::TTF::Scripts Perl packages directly from our SVN repository (rather than using the Windows installer or even the CPAN release). More instructions about this are at the FontUtils link given above.
ttfsubset - subset a font
ttfsubset [options] infont outfont
Opens infont (a .ttf file), subsets it according to the supplied
options, then writes the resulting file to outfont.
-h Get full help
-d tag[,...] List of font tables to remove.
-g listfile File containing list of glyphs to retain
-s tag[,...] List of OpenType script tags to retain
-l tag[,...] List of OpenType language tags to retain
-n name Renames the font to the given name (as per ttfname -n)
ttfsubset removes parts of a font in order to produce a working,
smaller, font. Multiple subsetting strategies are provided and
controlled by options.
The "-d" option is used to delete whole font tables, e.g., all Graphite
tables. A list of four-letter table tags identifies the tables to be
removed. As in ttftable, the following (case insensitive) pseudo tags
can also be used:
graphite all SIL Graphite tables (Silf Feat Gloc Glat Sill Sile)
volt all Microsoft VOLT tables (TSIV TSID TSIP TSIS)
opentype all OpenTYpe tables (GDEF GSUB GPOS)
The "-g" option specifies a file that lists glyphs to be retained in the
subset font -- ttfsubset will remove all other glyphs and then do what
it can to simplify remaining features. Glyphs are identified in the file
using space-separated indentifiers which can be decimal numeric glyph
IDs, postscript glyph names, or hexidecimal Unicode scalar values in the
format of U+xxxx. Ranges of glyphs (specified by either glyph ID or
postscript name) and of Unicode scalar values can be specified using
'..' between the values. Glyph identifiers or ranges may be followed
immediately by equals sign and 4 to 6 hex digits to indicate the
glyph(s) should be encoded.
The "-s" and "-l" options identify OpenType script and language
(respectively) tags to retain in the font. The Default language is
always retained, so specify "-l ''" to remove all but the default
ttfsubset is an evolving tool and the invitation is given to contribute
improvements that will result in smaller output fonts.