Skip to main content

Read, write and generate UFOs with designspace data.

Project description

Travis PyPI

ufoProcessor

Python package based on the designSpaceDocument from fontTools.designspaceLib) specifically to process and generate instances for UFO files, glyphs and other data.

  • Collect source materials
  • Provide mutators for specific glyphs, font info, kerning so that other tools can generate partial instances. Either from MutatorMath or fonttools varlib.model.
  • Support designspace format 4 with layers.
  • Apply avar-like designspace bending
  • Apply rules
  • Generate actual UFO instances in formats 2 and 3.
  • Round geometry as requested
  • Try to stay up to date with fontTools
  • Baseclass for tools that need access to designspace data.

Usage

The easiest way to use ufoProcessor is to call build(designspacePath)

  • documentPath: path to the designspace file.

  • outputUFOFormatVersion: integer, 2, 3. Format for generated UFOs. Note: can be different from source UFO format.

  • roundGeometry: bool, if the geometry needs to be rounded to whole integers. This affects glyphs, metrics, kerning, select font info.

  • processRules: bool, when generating UFOs, execute designspace rules as swaps.

  • logger: optional logger object.

  • documentPath: filepath to the .designspace document

  • outputUFOFormatVersion: ufo format for output, default is the current, so 3.

  • useVarlib: True if you want the geometry to be generated with varLib.model instead of mutatorMath.

Examples

Generate all the instances (using the varlib model, no rounding):

import ufoProcessor
myPath = "myDesignspace.designspace"
ufoProcessor.build(myPath)

Generate all the instances (using the varlib model, but round all the geometry to integers):

import ufoProcessor
myPath = "myDesignspace.designspace"
ufoProcessor.build(myPath, roundGeometry=True)

Generate all the instances (using the mutatormath model, no rounding):

import ufoProcessor
myPath = "myDesignspace.designspace"
ufoProcessor.build(myPath, useVarlib=False)

Generate an instance for one glyph, "A" at width=100, weight=200. (assuming the designspace has those axes and the masters have that glyph)

import ufoProcessor
myPath = "myDesignspace.designspace"
doc = ufoProcessor.DesignSpaceProcessor()
doc.read(myPath)
doc.loadFonts()
glyphMutator = doc.getGlyphMutator("A")
instance = glyphMutator.makeInstance(Location(width=100, weight=200)

Depending on the setting for usevarlib, the glyphMutator object returned by getGlyphMutator in the example above can either be a MutatorMath.Mutator, or a VariationModelMutator object. That uses the fontTools.varLib.models.VariationModel but it is wrapped and can be called as a Mutator object to generate instances. This way DesignSpaceProcessor does not need to know much about which math model it is using.

Convert Superpolator to designspace

The ufoProcessor.sp3 module has some tools for interpreting Superpolator .sp3 documents. Not all data is migrated. But the important geometry is there. Given that Superpolator can read designspace files, there is hopefully no real need for a writer. Note that this conversion is lossy.

  • Axis
    • dimensions
    • name
    • tag
  • Source
    • ufo path
    • familyname, stylename
    • mute state (stored in lib)
    • location
  • Instance
    • ufo path
    • familyname, stylename
    • stylemap names
    • location
  • Rules
    • Simple Rules are wrapped in a conditionset.
    • most of the really old Superpolator rules can't be converted. Only rules with < or > operators are used.
  • Some Superpolator user prefs
    • Preview text
    • Which axes used vertically and horizontally

Usage

# convert sp3 file to designspace
# first make a new designspace doc object
doc = DesignSpaceDocument()
# feed it to the reader
reader = SuperpolatorReader(sp3path, doc)
reader.read()
# now you can work with it, even save it
doc.write(designspacePath)

Indeed that last example comes from this convenience function:
sp3_to_designspace(sp3path, designspacePath=None) If designspacePath = None, sp3_to_designspace will use the same path for the output, but replace the .sp3 with .designspace extension. If the file exists it will overwrite.

Notes

  • Glyph-specific masters in instances are ignored.
  • Instance notes are ignored.
  • Designspace geometry requires the default master to be on the default value of each axis. Superpolator handled that differently, it would find the default dynamically. So it is possible that converted designspaces need some work in terms of the basic structure. That can't be handled automatically.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ufoProcessor-1.0.9.zip (70.1 kB view details)

Uploaded Source

Built Distribution

ufoProcessor-1.0.9-py2.py3-none-any.whl (22.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file ufoProcessor-1.0.9.zip.

File metadata

  • Download URL: ufoProcessor-1.0.9.zip
  • Upload date:
  • Size: 70.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.7

File hashes

Hashes for ufoProcessor-1.0.9.zip
Algorithm Hash digest
SHA256 3d964a9ed2ebb234d69cd891c9b16d059e8c2bdee3be4ae0cbf93571db9ae139
MD5 9f7bbd104a6885a5d91dd34f53082050
BLAKE2b-256 28b4d75a96807a1be0a8c941eb2d0c86f469e2ae634d11a1da3450213f17cc9b

See more details on using hashes here.

File details

Details for the file ufoProcessor-1.0.9-py2.py3-none-any.whl.

File metadata

  • Download URL: ufoProcessor-1.0.9-py2.py3-none-any.whl
  • Upload date:
  • Size: 22.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.7

File hashes

Hashes for ufoProcessor-1.0.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 586d6a08ae6fd18489b9bec2754484a0c09645c543f0a090ba7d4cc229fa1af9
MD5 3749e19ee374049f8a695f542d73d3fa
BLAKE2b-256 1244995ab818964a7d94152a751d5d582dd6b301e7ec123806faace3b871e5f6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page