diff --git a/Doc/source/merge.rst b/Doc/source/merge.rst index 2fd85ef28..311461557 100644 --- a/Doc/source/merge.rst +++ b/Doc/source/merge.rst @@ -1,8 +1,10 @@ -##### -merge -##### +#################################### +merge: Merge multiple fonts into one +#################################### -.. automodule:: fontTools.merge +``fontTools.merge`` provides both a library and a command line interface +(``fonttools merge``) for merging multiple fonts together. + +.. autoclass:: fontTools.merge.Merger :inherited-members: :members: - :undoc-members: diff --git a/Lib/fontTools/merge.py b/Lib/fontTools/merge.py index a6a7b0284..890234df9 100644 --- a/Lib/fontTools/merge.py +++ b/Lib/fontTools/merge.py @@ -948,6 +948,34 @@ class _NonhashableDict(object): del self.d[id(k)] class Merger(object): + """Font merger. + + This class merges multiple files into a single OpenType font, taking into + account complexities such as OpenType layout (``GSUB``/``GPOS``) tables and + cross-font metrics (e.g. ``hhea.ascent`` is set to the maximum value across + all the fonts). + + If multiple glyphs map to the same Unicode value, and the glyphs are considered + sufficiently different (that is, they differ in any of paths, widths, or + height), then subsequent glyphs are renamed and a lookup in the ``locl`` + feature will be created to disambiguate them. For example, if the arguments + are an Arabic font and a Latin font and both contain a set of parentheses, + the Latin glyphs will be renamed to ``parenleft#1`` and ``parenright#1``, + and a lookup will be inserted into the to ``locl`` feature (creating it if + necessary) under the ``latn`` script to substitute ``parenleft`` with + ``parenleft#1`` etc. + + Restrictions: + + - All fonts must currently have TrueType outlines (``glyf`` table). + Merging fonts with CFF outlines is not supported. + - All fonts must have the same units per em. + - If duplicate glyph disambiguation takes place as described above then the + fonts must have a ``GSUB`` table. + + Attributes: + options: Currently unused. + """ def __init__(self, options=None): @@ -957,7 +985,15 @@ class Merger(object): self.options = options def merge(self, fontfiles): + """Merges fonts together. + Args: + fontfiles: A list of file names to be merged + + Returns: + A :class:`fontTools.ttLib.TTFont` object. Call the ``save`` method on + this to write it out to an OTF file. + """ mega = ttLib.TTFont() #