diff --git a/README.rst b/README.rst index efe305e7..02e3ad5e 100644 --- a/README.rst +++ b/README.rst @@ -18,11 +18,184 @@ which work exactly the same way: otf = compileOTF(ufo) otf.save('MyFont-Regular.otf') -In most cases, the behavior of ufo2ft should match that of ufo2fdk, -whose documentation is retained below (and hopefully is still accurate). +In most cases, the behavior of ufo2ft should match that of ufo2fdk, whose +documentation is retained further below (and hopefully is still accurate). + +Modifying the behavior of ufo2ft +-------------------------------- + +ufo2ft by default tries to do little more than what the UFO specification +demands. Popular font design applications that came after the specification was +made and specific workflows however may demand more. ufo2ft obeys certain keys +in a UFO's "lib", i.e. key-value pairs in the UFO's ``lib.plist`` file. + +Filters (lib key: ``com.github.googlei18n.ufo2ft.filters``) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Filters can modify glyphs before ("pre" = True) or after ("pre" = False) +decomposition of composite glyphs. The default is running filters after +decomposition ("pre" = False). + +Example +^^^^^^^ + +You would insert the following into a UFO's ``lib.plist``: + +.. code:: xml + + com.github.googlei18n.ufo2ft.filters + + + name + propagateAnchors + pre + + + include + + a + b + + + + +Or in code: + +.. code:: python + + from defcon import Font + from ufo2ft import compileOTF + + ufo = Font("MyFont-Regular.ufo") + ufo.lib["com.github.googlei18n.ufo2ft.filters"] = [ + {"name": "propagateAnchors", "pre": True, "include": ["a", "b"]} + ] + otf = compileOTF(ufo) + otf.save("MyFont-Regular.otf") + +Using code allows you to define an inclusion function (not available for exclusion), like so: + +.. code:: python + + from defcon import Font + from ufo2ft import compileOTF + + def my_filter_function(glyph): + """Include all glyphs with a Unicode value between U+007F and U+00FF.""" + if glyph.unicode: + return 0x007F < glyph.unicode < 0x00FF + return False + + ufo = Font("MyFont-Regular.ufo") + ufo.lib["com.github.googlei18n.ufo2ft.filters"] = [ + {"name": "propagateAnchors", "pre": True, "include": my_filter_function} + ] + otf = compileOTF(ufo) + otf.save("MyFont-Regular.otf") + +``cubicToQuadratic`` +^^^^^^^^^^^^^^^^^^^^ + +Converts outlines from cubic (PostScript flavor) to quadratic (TrueType flavor). +It is run by default when producing TrueType-flavored OpenType fonts. Honors the +UFO's ``com.github.googlei18n.cu2qu.curve_type`` lib key. + +.. code:: xml + + com.github.googlei18n.ufo2ft.filters + + + name + cubicToQuadratic + + rememberCurveType + + + conversionError + 0.001 + + reverseDirection + + + + +When to modify the filter settings: + +* You want fine-grained control over the conversion error. +* Your font is or some glyphs are drawn using quadratic curves and you want to + prevent contour direction reversal. + +``decomposeComponents`` +^^^^^^^^^^^^^^^^^^^^^^^ + +What it does... + +Example... + +When to use... + +When not to use... + +``flattenComponents`` +^^^^^^^^^^^^^^^^^^^^^ + +What it does... + +Example... + +When to use... + +When not to use... + +``propagateAnchors`` +^^^^^^^^^^^^^^^^^^^^ + +What it does... + +Example... + +When to use... + +When not to use... + +``removeOverlaps`` +^^^^^^^^^^^^^^^^^^ + +What it does... + +Example... + +When to use... + +When not to use... + +``transformations`` +^^^^^^^^^^^^^^^^^^^ + +What it does... + +Example... + +When to use... + +When not to use... Naming Data -~~~~~~~~~~~ +----------- As with any OpenType compiler, you have to set the font naming data to a particular standard for your naming to be set correctly. In ufo2fdk, you @@ -82,7 +255,7 @@ be honored. Feature generation -~~~~~~~~~~~~~~~~~~ +------------------ If your font's features do not contain kerning/mark/mkmk features, ufo2ft will create them based on your font's kerning/anchor data. @@ -96,7 +269,7 @@ For example, a GPOS table in this format would be stored within the UFO at Fallbacks -~~~~~~~~~ +--------- Most of the fallbacks have static values. To see what is set for these, look at ``fontInfoData.py`` in the source code. @@ -105,7 +278,7 @@ In some cases, the fallback values are dynamically generated from other data in the info object. These are handled internally with functions. Merging TTX -~~~~~~~~~~~ +----------- If the UFO data directory has a ``com.github.fonttools.ttx`` folder with TTX files ending with ``.ttx``, these will be merged in the generated font.