API Reference¶
Core Objects¶
Font¶
- class ufoLib2.objects.Font(*, layers: ufoLib2.objects.layerSet.LayerSet = NOTHING, info: Union[ufoLib2.objects.info.Info, Mapping[str, Any]] = NOTHING, features: Union[ufoLib2.objects.features.Features, str] = NOTHING, groups: Dict[str, List[str]] = NOTHING, kerning: Dict[Tuple[str, str], float] = NOTHING, lib: Dict[str, Any] = NOTHING, data: Union[ufoLib2.objects.dataSet.DataSet, MutableMapping[str, bytes]] = NOTHING, images: Union[ufoLib2.objects.imageSet.ImageSet, MutableMapping[str, bytes]] = NOTHING)[source]¶
A data class representing a single Unified Font Object (UFO).
Font uses
fontTools.ufoLib.UFOReader
andfontTools.ufoLib.UFOWriter
to read and write UFO data from and to disk. It will default to reading lazily, loading glyphs, data and images as they are accessed. Copying a font implicitly loads everything eagerly before.The data model is formally specified at http://unifiedfontobject.org/versions/ufo3/index.html.
- Parameters
path – The path to the UFO to load. The only positional parameter and a defcon-API-compatibility parameter. We recommend to use the
Font.open()
class method instead.layers (LayerSet) – A mapping of layer names to Layer objects.
info (Info) – The font Info object.
features (Features) – The font Features object.
groups (Dict[str, List[str]]) – A mapping of group names to a list of glyph names.
kerning (Dict[Tuple[str, str], float]) – A mapping of a tuple of first and second kerning pair to a kerning value.
lib (Dict[str, Any]) – A mapping of keys to arbitrary values.
data (DataSet) – A mapping of data file paths to arbitrary data.
images (ImageSet) – A mapping of image file paths to arbitrary image data.
- Behavior:
The Font object has some dict-like behavior for quick access to glyphs on the the default layer. For example, to get a glyph by name from the default layer:
glyph = font["aGlyphName"]
To iterate over all glyphs in the default layer:
for glyph in font: pass
To get the number of glyphs in the default layer:
glyphCount = len(font)
To find out if a font contains a particular glyph in the default layer by name:
exists = "aGlyphName" in font
To remove a glyph from the default layer by name:
del font["aGlyphName"]
To replace a glyph in the default layer with another
Glyph
object:font["aGlyphName"] = otherGlyph
To copy a font:
import copy fontCopy = copy.deepcopy(font)
Layers behave the same, for when you’re working on something other than the default layer.
- addGlyph(glyph: ufoLib2.objects.glyph.Glyph) None [source]¶
Appends glyph object to the default layer unless its name is already taken.
Note
Call the method on the layer directly if you want to overwrite entries with the same name or append copies of the glyph.
- appendGuideline(guideline: Union[ufoLib2.objects.guideline.Guideline, Mapping[str, Any]]) None [source]¶
Appends a guideline to the list of the font’s global guidelines.
Creates the global guideline list unless it already exists.
- Parameters
guideline – A
Guideline
object or a mapping for the Guideline constructor.
- property bounds: Optional[ufoLib2.objects.misc.BoundingBox]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the default layer, taking the actual contours into account.
For defcon API compatibility only.
- close() None [source]¶
Closes the UFOReader if it still exists to finalize any outstanding file operations.
- property controlPointBounds: Optional[ufoLib2.objects.misc.BoundingBox]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the layer, taking only the control points into account.
For defcon API compatibility only.
- get(name: str, default: Optional[T] = None) Union[T, None, ufoLib2.objects.glyph.Glyph] [source]¶
Return the
Glyph
object for name if it is present in the default layer, otherwise returndefault
.
- property glyphOrder: List[str]¶
The font’s glyph order.
See http://unifiedfontobject.org/versions/ufo3/lib.plist/#publicglyphorder for semantics.
- Getter:
Return the font’s glyph order, if it is set in lib, or an empty list.
Note
The getter always returns a new list, modifications to it do not change the lib content.
- Setter:
Sets the font’s glyph order. If
value
is None or an empty list, the glyph order key will be deleted from the lib if it exists.
- groups¶
A mapping of group names to a list of glyph names.
- Type
Dict[str, List[str]]
- property guidelines: List[ufoLib2.objects.guideline.Guideline]¶
The font’s global guidelines.
- Getter:
Returns the font’s global guidelines or an empty list.
- Setter:
- Appends the list of Guidelines to the global Guidelines.
XXX Should it replace them?
- kerning¶
A mapping of a tuple of first and second kerning pair to a kerning value.
- Type
Dict[Tuple[str, str], float]
- lib¶
A mapping of keys to arbitrary values.
- Type
Dict[str, Any]
- newGlyph(name: str) ufoLib2.objects.glyph.Glyph [source]¶
Creates and returns new
Glyph
object in default layer with name.
- newLayer(name: str, **kwargs: Any) ufoLib2.objects.layer.Layer [source]¶
Creates and returns a new
Layer
.- Parameters
name – The name of the new layer.
kwargs – The arguments passed to the Layer object constructor.
- objectLib(object: ufoLib2.typing.HasIdentifier) Dict[str, Any] [source]¶
Return the lib for an object with an identifier, as stored in a font’s lib.
If the object does not yet have an identifier, a new one is assigned to it. If the font lib does not yet contain the object’s lib, a new one is inserted and returned.
>>> from ufoLib2.objects import Font, Guideline >>> font = Font() >>> font.guidelines = [Guideline(x=100)] >>> guideline_lib = font.objectLib(font.guidelines[0]) >>> guideline_lib["com.test.foo"] = 1234 >>> guideline_id = font.guidelines[0].identifier >>> assert guideline_id is not None >>> assert font.lib["public.objectLibs"][guideline_id] is guideline_lib
- classmethod open(path: Union[str, bytes, os.PathLike[str], os.PathLike[bytes]], lazy: bool = True, validate: bool = True) Font [source]¶
Instantiates a new Font object from a path to a UFO.
- Parameters
path – The path to the UFO to load.
lazy – If True, load glyphs, data files and images as they are accessed. If False, load everything up front.
validate – If True, enable UFO data model validation during loading. If False, load whatever is deserializable.
- property path: Optional[Union[str, bytes, os.PathLike[str], os.PathLike[bytes]]]¶
Return the path of the UFO, if it was set, or None.
- classmethod read(reader: fontTools.ufoLib.UFOReader, lazy: bool = True) ufoLib2.objects.font.Font [source]¶
Instantiates a Font object from a
fontTools.ufoLib.UFOReader
.- Parameters
path – The path to the UFO to load.
lazy – If True, load glyphs, data files and images as they are accessed. If False, load everything up front.
- property reader: Optional[fontTools.ufoLib.UFOReader]¶
Returns the underlying
fontTools.ufoLib.UFOReader
.
- renameGlyph(name: str, newName: str, overwrite: bool = False) None [source]¶
Renames a
Glyph
object in the default layer.- Parameters
name – The old name.
newName – The new name.
overwrite – If False, raises exception if newName is already taken. If True, overwrites (read: deletes) the old
Glyph
object.
- renameLayer(name: str, newName: str, overwrite: bool = False) None [source]¶
Renames a
Layer
.- Parameters
name – The old name.
newName – The new name.
overwrite – If False, raises exception if newName is already taken. If True, overwrites (read: deletes) the old
Layer
object.
- save(path: Optional[Union[str, bytes, os.PathLike[str], os.PathLike[bytes], fs.base.FS]] = None, formatVersion: int = 3, structure: Optional[fontTools.ufoLib.UFOFileStructure] = None, overwrite: bool = False, validate: bool = True) None [source]¶
Saves the font to
path
.- Parameters
path – The target path. If it is None, the path from the last save (except when that was a
fs.base.FS
) or when the font was first opened will be used.formatVersion – The version to save the UFO as. Only version 3 is supported currently.
structure (fontTools.ufoLib.UFOFileStructure) – How to store the UFO. Can be either None, “zip” or “package”. If None, it tries to use the same structure as the original UFO at the output path. If “zip”, the UFO will be saved as compressed archive. If “package”, it is saved as a regular folder or “package”.
overwrite – If False, raises OSError when the target path exists. If True, overwrites the target path.
validate – If True, will validate the data in Font before writing it out. If False, will write out whatever is serializable.
- unlazify() None [source]¶
Load all glyphs, data files and images if the Font object loaded them lazily previously.
- write(writer: fontTools.ufoLib.UFOWriter, saveAs: Optional[bool] = None) None [source]¶
Writes this Font to a
fontTools.ufoLib.UFOWriter
.- Parameters
writer – The
fontTools.ufoLib.UFOWriter
to write to.saveAs – If True, tells the writer to save out-of-place. If False, tells the writer to save in-place. This affects how resources are cleaned before writing.
Info¶
- class ufoLib2.objects.Info(familyName: Optional[str] = None, styleName: Optional[str] = None, styleMapFamilyName: Optional[str] = None, styleMapStyleName: Optional[str] = None, versionMajor: Optional[int] = None, versionMinor: Optional[int] = None, copyright: Optional[str] = None, trademark: Optional[str] = None, unitsPerEm: Optional[float] = None, descender: Optional[float] = None, xHeight: Optional[float] = None, capHeight: Optional[float] = None, ascender: Optional[float] = None, italicAngle: Optional[float] = None, note: Optional[str] = None, guidelines: Optional[Sequence[Union[ufoLib2.objects.guideline.Guideline, Any]]] = None, openTypeGaspRangeRecords: Optional[Sequence[Union[ufoLib2.objects.info.GaspRangeRecord, Any]]] = None, openTypeHeadCreated: Optional[str] = None, openTypeHeadLowestRecPPEM: Optional[int] = None, openTypeHeadFlags: Optional[List[int]] = None, openTypeHheaAscender: Optional[int] = None, openTypeHheaDescender: Optional[int] = None, openTypeHheaLineGap: Optional[int] = None, openTypeHheaCaretSlopeRise: Optional[int] = None, openTypeHheaCaretSlopeRun: Optional[int] = None, openTypeHheaCaretOffset: Optional[int] = None, openTypeNameDesigner: Optional[str] = None, openTypeNameDesignerURL: Optional[str] = None, openTypeNameManufacturer: Optional[str] = None, openTypeNameManufacturerURL: Optional[str] = None, openTypeNameLicense: Optional[str] = None, openTypeNameLicenseURL: Optional[str] = None, openTypeNameVersion: Optional[str] = None, openTypeNameUniqueID: Optional[str] = None, openTypeNameDescription: Optional[str] = None, openTypeNamePreferredFamilyName: Optional[str] = None, openTypeNamePreferredSubfamilyName: Optional[str] = None, openTypeNameCompatibleFullName: Optional[str] = None, openTypeNameSampleText: Optional[str] = None, openTypeNameWWSFamilyName: Optional[str] = None, openTypeNameWWSSubfamilyName: Optional[str] = None, openTypeNameRecords: Optional[Sequence[Union[ufoLib2.objects.info.NameRecord, Any]]] = None, openTypeOS2WidthClass: Optional[int] = None, openTypeOS2WeightClass: Optional[int] = None, openTypeOS2Selection: Optional[List[int]] = None, openTypeOS2VendorID: Optional[str] = None, openTypeOS2Panose: Optional[List[int]] = None, openTypeOS2FamilyClass: Optional[List[int]] = None, openTypeOS2UnicodeRanges: Optional[List[int]] = None, openTypeOS2CodePageRanges: Optional[List[int]] = None, openTypeOS2TypoAscender: Optional[int] = None, openTypeOS2TypoDescender: Optional[int] = None, openTypeOS2TypoLineGap: Optional[int] = None, openTypeOS2WinAscent: Optional[int] = None, openTypeOS2WinDescent: Optional[int] = None, openTypeOS2Type: Optional[List[int]] = None, openTypeOS2SubscriptXSize: Optional[int] = None, openTypeOS2SubscriptYSize: Optional[int] = None, openTypeOS2SubscriptXOffset: Optional[int] = None, openTypeOS2SubscriptYOffset: Optional[int] = None, openTypeOS2SuperscriptXSize: Optional[int] = None, openTypeOS2SuperscriptYSize: Optional[int] = None, openTypeOS2SuperscriptXOffset: Optional[int] = None, openTypeOS2SuperscriptYOffset: Optional[int] = None, openTypeOS2StrikeoutSize: Optional[int] = None, openTypeOS2StrikeoutPosition: Optional[int] = None, openTypeVheaVertTypoAscender: Optional[int] = None, openTypeVheaVertTypoDescender: Optional[int] = None, openTypeVheaVertTypoLineGap: Optional[int] = None, openTypeVheaCaretSlopeRise: Optional[int] = None, openTypeVheaCaretSlopeRun: Optional[int] = None, openTypeVheaCaretOffset: Optional[int] = None, postscriptFontName: Optional[str] = None, postscriptFullName: Optional[str] = None, postscriptSlantAngle: Optional[float] = None, postscriptUniqueID: Optional[int] = None, postscriptUnderlineThickness: Optional[float] = None, postscriptUnderlinePosition: Optional[float] = None, postscriptIsFixedPitch: Optional[bool] = None, postscriptBlueValues: Optional[List[float]] = None, postscriptOtherBlues: Optional[List[float]] = None, postscriptFamilyBlues: Optional[List[float]] = None, postscriptFamilyOtherBlues: Optional[List[float]] = None, postscriptStemSnapH: Optional[List[float]] = None, postscriptStemSnapV: Optional[List[float]] = None, postscriptBlueFuzz: Optional[float] = None, postscriptBlueShift: Optional[float] = None, postscriptBlueScale: Optional[float] = None, postscriptForceBold: Optional[bool] = None, postscriptDefaultWidthX: Optional[float] = None, postscriptNominalWidthX: Optional[float] = None, postscriptWeightName: Optional[str] = None, postscriptDefaultCharacter: Optional[str] = None, postscriptWindowsCharacterSet: Optional[str] = None, macintoshFONDName: Optional[str] = None, macintoshFONDFamilyID: Optional[int] = None, year: Optional[int] = None)[source]¶
A data class representing the contents of fontinfo.plist.
The attributes are formally specified at http://unifiedfontobject.org/versions/ufo3/fontinfo.plist/. Value validation is mostly done during saving and loading.
- ascender¶
- capHeight¶
- copyright¶
- descender¶
- familyName¶
- property guidelines: Optional[List[ufoLib2.objects.guideline.Guideline]]¶
- italicAngle¶
- macintoshFONDFamilyID¶
- macintoshFONDName¶
- note¶
- property openTypeGaspRangeRecords: Optional[List[ufoLib2.objects.info.GaspRangeRecord]]¶
- openTypeHeadCreated¶
- openTypeHeadFlags¶
- openTypeHeadLowestRecPPEM¶
- openTypeHheaAscender¶
- openTypeHheaCaretOffset¶
- openTypeHheaCaretSlopeRise¶
- openTypeHheaCaretSlopeRun¶
- openTypeHheaDescender¶
- openTypeHheaLineGap¶
- openTypeNameCompatibleFullName¶
- openTypeNameDescription¶
- openTypeNameDesigner¶
- openTypeNameDesignerURL¶
- openTypeNameLicense¶
- openTypeNameLicenseURL¶
- openTypeNameManufacturer¶
- openTypeNameManufacturerURL¶
- openTypeNamePreferredFamilyName¶
- openTypeNamePreferredSubfamilyName¶
- property openTypeNameRecords: Optional[List[ufoLib2.objects.info.NameRecord]]¶
- openTypeNameSampleText¶
- openTypeNameUniqueID¶
- openTypeNameVersion¶
- openTypeNameWWSFamilyName¶
- openTypeNameWWSSubfamilyName¶
- openTypeOS2CodePageRanges¶
- openTypeOS2FamilyClass¶
- openTypeOS2Panose¶
- openTypeOS2Selection¶
- openTypeOS2StrikeoutPosition¶
- openTypeOS2StrikeoutSize¶
- openTypeOS2SubscriptXOffset¶
- openTypeOS2SubscriptXSize¶
- openTypeOS2SubscriptYOffset¶
- openTypeOS2SubscriptYSize¶
- openTypeOS2SuperscriptXOffset¶
- openTypeOS2SuperscriptXSize¶
- openTypeOS2SuperscriptYOffset¶
- openTypeOS2SuperscriptYSize¶
- openTypeOS2Type¶
- openTypeOS2TypoAscender¶
- openTypeOS2TypoDescender¶
- openTypeOS2TypoLineGap¶
- openTypeOS2UnicodeRanges¶
- openTypeOS2VendorID¶
- openTypeOS2WeightClass¶
- property openTypeOS2WidthClass: Optional[ufoLib2.objects.info.WidthClass]¶
- openTypeOS2WinAscent¶
- openTypeOS2WinDescent¶
- openTypeVheaCaretOffset¶
- openTypeVheaCaretSlopeRise¶
- openTypeVheaCaretSlopeRun¶
- openTypeVheaVertTypoAscender¶
- openTypeVheaVertTypoDescender¶
- openTypeVheaVertTypoLineGap¶
- postscriptBlueFuzz¶
- postscriptBlueScale¶
- postscriptBlueShift¶
- postscriptBlueValues¶
- postscriptDefaultCharacter¶
- postscriptDefaultWidthX¶
- postscriptFamilyBlues¶
- postscriptFamilyOtherBlues¶
- postscriptFontName¶
- postscriptForceBold¶
- postscriptFullName¶
- postscriptIsFixedPitch¶
- postscriptNominalWidthX¶
- postscriptOtherBlues¶
- postscriptSlantAngle¶
- postscriptStemSnapH¶
- postscriptStemSnapV¶
- postscriptUnderlinePosition¶
- postscriptUnderlineThickness¶
- postscriptUniqueID¶
- postscriptWeightName¶
- postscriptWindowsCharacterSet¶
- classmethod read(reader: fontTools.ufoLib.UFOReader) ufoLib2.objects.info.Info [source]¶
Instantiates a Info object from a
fontTools.ufoLib.UFOReader
.
- styleMapFamilyName¶
- styleMapStyleName¶
- styleName¶
- trademark¶
- unitsPerEm¶
- versionMajor¶
- versionMinor¶
- xHeight¶
- year¶
Features¶
- class ufoLib2.objects.features.Features(text: str = '')[source]¶
A data class representing UFO features.
See http://unifiedfontobject.org/versions/ufo3/features.fea/.
- text¶
Holds the content of the features.fea file.
DataSet¶
- class ufoLib2.objects.dataSet.DataSet(data: Dict[str, Union[bytes, ufoLib2.objects.misc.Placeholder]] = NOTHING)[source]¶
Represents a mapping of POSIX filename strings to arbitrary data bytes.
Always use forward slahes (/) as directory separators, even on Windows.
- Behavior:
DataSet behaves like a dictionary of type
Dict[str, bytes]
.>>> from ufoLib2 import Font >>> font = Font() >>> font.data["test.txt"] = b"123" >>> font.data["directory/my_binary_blob.bin"] = b"456" >>> font.data["test.txt"] b'123' >>> del font.data["test.txt"] >>> list(font.data.items()) [('directory/my_binary_blob.bin', b'456')]
- clear() None. Remove all items from D. ¶
- property fileNames: List[str]¶
Returns a list of filenames in the data store.
- get(k[, d]) D[k] if k in D, else d. d defaults to None. ¶
- items() a set-like object providing a view on D's items ¶
- keys() a set-like object providing a view on D's keys ¶
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
If key is not found, d is returned if given, otherwise KeyError is raised.
- popitem() (k, v), remove and return some (key, value) pair ¶
as a 2-tuple; but raise KeyError if D is empty.
- classmethod read(reader: fontTools.ufoLib.UFOReader, lazy: bool = True) Tds ¶
Instantiate the data store from a
fontTools.ufoLib.UFOReader
.
- setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D ¶
- unlazify() None ¶
Load all data into memory.
- update([E, ]**F) None. Update D from mapping/iterable E and F. ¶
If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
- values() an object providing a view on D's values ¶
- write(writer: fontTools.ufoLib.UFOWriter, saveAs: Optional[bool] = None) None ¶
Write the data store to a
fontTools.ufoLib.UFOWriter
.
LayerSet¶
- class ufoLib2.objects.LayerSet(layers: OrderedDict[str, Union[Layer, Placeholder]], defaultLayer: ufoLib2.objects.layer.Layer)[source]¶
Represents a mapping of layer names to Layer objects.
See http://unifiedfontobject.org/versions/ufo3/layercontents.plist/ for layer semantics.
- Behavior:
LayerSet behaves partly like a dictionary of type
Dict[str, Layer]
, but creating and loading layers is done through their own methods. Unless the font is loaded eagerly (withlazy=False
), the layer objects and their glyphs are by default only loaded into memory when accessed.To get the number of layers in the font:
layerCount = len(font.layers)
To iterate over all layers:
for layer in font.layers: ...
To check if a specific layer exists:
exists = "myLayerName" in font.layers
To get a specific layer:
font.layers["myLayerName"]
To delete a specific layer:
del font.layers["myLayerName"]
- classmethod default() ufoLib2.objects.layerSet.LayerSet [source]¶
Return a new LayerSet with an empty default Layer.
- defaultLayer¶
The Layer that is marked as the default, typically named
public.default
.
- classmethod from_iterable(value: Iterable[ufoLib2.objects.layer.Layer], defaultLayerName: str = 'public.default') ufoLib2.objects.layerSet.LayerSet [source]¶
Instantiates a LayerSet from an iterable of
Layer
objects.- Parameters
value – an iterable of
Layer
objects.defaultLayerName – the name of the default layer of the ones in
value
.
- get(name: str, default: Optional[T] = None) Union[T, None, ufoLib2.objects.layer.Layer] [source]¶
- property layerOrder: List[str]¶
The font’s layer order.
- Getter:
Returns the font’s layer order.
Note
The getter always returns a new list, modifications to it do not change the LayerSet.
- Setter:
Sets the font’s layer order. The set order value must contain all layers that are present in the LayerSet.
- newLayer(name: str, **kwargs: Any) ufoLib2.objects.layer.Layer [source]¶
Creates and returns a named layer.
- Parameters
name – The layer name.
kwargs – Arguments passed to the constructor of Layer.
- classmethod read(reader: fontTools.ufoLib.UFOReader, lazy: bool = True) ufoLib2.objects.layerSet.LayerSet [source]¶
Instantiates a LayerSet object from a
fontTools.ufoLib.UFOReader
.- Parameters
path – The path to the UFO to load.
lazy – If True, load glyphs, data files and images as they are accessed. If False, load everything up front.
- renameGlyph(name: str, newName: str, overwrite: bool = False) None [source]¶
Renames a glyph across all layers.
- Parameters
name – The old name.
newName – The new name.
overwrite – If False, raises exception if newName is already taken in any layer. If True, overwrites (read: deletes) the old Glyph object.
- renameLayer(name: str, newName: str, overwrite: bool = False) None [source]¶
Renames a layer.
- Parameters
name – The old name.
newName – The new name.
overwrite – If False, raises exception if newName is already taken. If True, overwrites (read: deletes) the old Layer object.
- write(writer: fontTools.ufoLib.UFOWriter, saveAs: Optional[bool] = None) None [source]¶
Writes this LayerSet to a
fontTools.ufoLib.UFOWriter
.- Parameters
writer (fontTools.ufoLib.UFOWriter) – The writer to write to.
saveAs – If True, tells the writer to save out-of-place. If False, tells the writer to save in-place. This affects how resources are cleaned before writing.
Layer¶
- class ufoLib2.objects.Layer(name: str = 'public.default', glyphs: Union[Dict[str, Union[ufoLib2.objects.glyph.Glyph, ufoLib2.objects.misc.Placeholder]], Sequence[ufoLib2.objects.glyph.Glyph]] = NOTHING, color: Optional[str] = None, lib: Dict[str, Any] = NOTHING)[source]¶
Represents a Layer that holds Glyph objects.
See http://unifiedfontobject.org/versions/ufo3/glyphs/layerinfo.plist/.
Note
Various methods that work on Glyph objects take a
layer
attribute, because the UFO data model prescribes that Components within a Glyph object refer to glyphs within the same layer.- Behavior:
Layer behaves partly like a dictionary of type
Dict[str, Glyph]
. Unless the font is loaded eagerly (withlazy=False
), the Glyph objects by default are only loaded into memory when accessed.To get the number of glyphs in the layer:
glyphCount = len(layer)
To iterate over all glyphs:
for glyph in layer: ...
To check if a specific glyph exists:
exists = "myGlyphName" in layer
To get a specific glyph:
layer["myGlyphName"]
To delete a specific glyph:
del layer["myGlyphName"]
- addGlyph(glyph: ufoLib2.objects.glyph.Glyph) None [source]¶
Appends glyph object to the this layer unless its name is already taken.
- property bounds: Optional[ufoLib2.objects.misc.BoundingBox]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the layer, taking the actual contours into account.
For defcon API compatibility only.
- color¶
The color assigned to the layer.
- property controlPointBounds: Optional[ufoLib2.objects.misc.BoundingBox]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the layer, taking only the control points into account.
For defcon API compatibility only.
- get(name: str, default: Optional[T] = None) Union[T, None, ufoLib2.objects.glyph.Glyph] [source]¶
Return the Glyph object for name if it is present in this layer, otherwise return
default
.
- insertGlyph(glyph: ufoLib2.objects.glyph.Glyph, name: Optional[str] = None, overwrite: bool = True, copy: bool = True) None [source]¶
Inserts Glyph object into this layer.
- Parameters
glyph – The Glyph object.
name – The name of the glyph.
overwrite – If True, overwrites (read: deletes) glyph with the same name if it exists. If False, raises KeyError.
copy – If True, copies the Glyph object before insertion. If False, inserts as is.
- instantiateGlyphObject() ufoLib2.objects.glyph.Glyph [source]¶
Returns a new Glyph instance.
For defcon API compatibility only.
- lib¶
The layer’s lib for mapping string keys to arbitrary data.
- loadGlyph(name: str) ufoLib2.objects.glyph.Glyph [source]¶
Load and return Glyph object.
- property name: str¶
The name of the layer.
- newGlyph(name: str) ufoLib2.objects.glyph.Glyph [source]¶
Creates and returns new Glyph object in this layer with name.
- pop(key: str) ufoLib2.objects.glyph.Glyph [source]¶
- pop(key: str, default: Union[ufoLib2.objects.glyph.Glyph, T] = <class 'KeyError'>) Union[ufoLib2.objects.glyph.Glyph, T]
Remove and return glyph from layer.
- Parameters
key – The name of the glyph.
default – What to return if there is no glyph with the given name.
- classmethod read(name: str, glyphSet: fontTools.ufoLib.glifLib.GlyphSet, lazy: bool = True) ufoLib2.objects.layer.Layer [source]¶
Instantiates a Layer object from a
fontTools.ufoLib.glifLib.GlyphSet
.- Parameters
name – The name of the layer.
glyphSet – The GlyphSet object to read from.
lazy – If True, load glyphs as they are accessed. If False, load everything up front.
- renameGlyph(name: str, newName: str, overwrite: bool = False) None [source]¶
Renames a Glyph object in this layer.
- Parameters
name – The old name.
newName – The new name.
overwrite – If False, raises exception if newName is already taken. If True, overwrites (read: deletes) the old Glyph object.
- write(glyphSet: fontTools.ufoLib.glifLib.GlyphSet, saveAs: bool = True) None [source]¶
Write Layer to a
fontTools.ufoLib.glifLib.GlyphSet
.- Parameters
glyphSet – The GlyphSet object to write to.
saveAs – If True, tells the writer to save out-of-place. If False, tells the writer to save in-place. This affects how resources are cleaned before writing.
Glyph¶
- class ufoLib2.objects.Glyph(name: Optional[str] = None, width: float = 0, height: float = 0, unicodes: List[int] = NOTHING, image: ufoLib2.objects.image.Image = NOTHING, lib: Dict[str, Any] = NOTHING, note: Optional[str] = None, anchors: List[ufoLib2.objects.anchor.Anchor] = NOTHING, components: List[ufoLib2.objects.component.Component] = NOTHING, contours: List[ufoLib2.objects.contour.Contour] = NOTHING, guidelines: List[ufoLib2.objects.guideline.Guideline] = NOTHING)[source]¶
Represents a glyph, containing contours, components, anchors and various other bits of data concerning it.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/.
- Behavior:
The Glyph object has list-like behavior. This behavior allows you to interact with contour data directly. For example, to get a particular contour:
contour = glyph[0]
To iterate over all contours:
for contour in glyph: ...
To get the number of contours:
contourCount = len(glyph)
To check if a
Contour
object is in glyph:exists = contour in glyph
To interact with components or anchors in a similar way, use the
Glyph.components
andGlyph.anchors
attributes.
- property anchors: List[ufoLib2.objects.anchor.Anchor]¶
The list of anchors the glyph contains.
- Getter:
Returns a list of anchors the glyph contains. Modifications of the list modify the Glyph object.
- Setter:
Clears current anchors and sets the new ones.
- appendAnchor(anchor: Union[ufoLib2.objects.anchor.Anchor, Mapping[str, Any]]) None [source]¶
Appends an
Anchor
object to glyph’s list of anchors.- Parameters
anchor – An
Anchor
object or mapping for the Anchor constructor.
- appendContour(contour: ufoLib2.objects.contour.Contour) None [source]¶
Appends a
Contour
object to glyph’s list of contours.
- appendGuideline(guideline: Union[ufoLib2.objects.guideline.Guideline, Mapping[str, Any]]) None [source]¶
Appends a
Guideline
object to glyph’s list of guidelines.- Parameters
guideline – A
Guideline
object or a mapping for the Guideline constructor.
- components¶
The list of components the glyph contains.
- contours¶
The list of contours the glyph contains.
- copy(name: Optional[str] = None) ufoLib2.objects.glyph.Glyph [source]¶
Returns a new Glyph (deep) copy, optionally override the new glyph name.
- copyDataFromGlyph(glyph: ufoLib2.objects.glyph.Glyph) None [source]¶
Deep-copies everything from the other glyph into self, except for the name.
Existing glyph data is overwritten.
For defcon API compatibility only.
- draw(pen: fontTools.pens.basePen.AbstractPen) None [source]¶
Draws glyph into given pen.
- drawPoints(pointPen: fontTools.pens.pointPen.AbstractPointPen) None [source]¶
Draws points of glyph into given point pen.
- getBottomMargin(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[float] [source]¶
Returns the the space in font units from the bottom of the canvas to the bottom of the glyph.
- Parameters
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- getBounds(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[ufoLib2.objects.misc.BoundingBox] [source]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the glyph, taking the actual contours into account.
- Parameters
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- getControlBounds(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[ufoLib2.objects.misc.BoundingBox] [source]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the glyph, taking only the control points into account.
- Parameters
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- getLeftMargin(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[float] [source]¶
Returns the the space in font units from the point of origin to the left side of the glyph.
- Parameters
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- getPen() fontTools.pens.basePen.AbstractPen [source]¶
Returns a pen for others to draw into self.
- getPointPen() fontTools.pens.pointPen.AbstractPointPen [source]¶
Returns a point pen for others to draw points into self.
- getRightMargin(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[float] [source]¶
Returns the the space in font units from the glyph’s advance width to the right side of the glyph.
- Parameters
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- getTopMargin(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[float] [source]¶
Returns the the space in font units from the top of the canvas to the top of the glyph.
- Parameters
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- property guidelines: List[ufoLib2.objects.guideline.Guideline]¶
The list of guidelines the glyph contains.
- Getter:
Returns a list of guidelines the glyph contains. Modifications of the list modify the Glyph object.
- Setter:
Clears current guidelines and sets the new ones.
- height¶
The height of the glyph.
- property image: ufoLib2.objects.image.Image¶
The background image reference associated with the glyph.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#image.
- Setter:
Sets the background image reference. Clears it if value is None.
- lib¶
The glyph’s mapping of string keys to arbitrary data.
- property markColor: Optional[str]¶
The color assigned to the glyph.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#publicmarkcolor.
- Getter:
Returns the mark color or None.
- Setter:
Sets the mark color. If value is None, deletes the key from the lib if present.
- move(delta: Tuple[float, float]) None [source]¶
Moves all contours, components and anchors by (x, y) font units.
- property name: Optional[str]¶
The name of the glyph.
- note¶
A free form text note about the glyph.
- objectLib(object: ufoLib2.typing.HasIdentifier) Dict[str, Any] [source]¶
Return the lib for an object with an identifier, as stored in a glyph’s lib.
If the object does not yet have an identifier, a new one is assigned to it. If the font lib does not yet contain the object’s lib, a new one is inserted and returned.
>>> from ufoLib2.objects import Font, Guideline >>> font = Font() >>> glyph = font.newGlyph("a") >>> glyph.guidelines = [Guideline(x=100)] >>> guideline_lib = glyph.objectLib(glyph.guidelines[0]) >>> guideline_lib["com.test.foo"] = 1234 >>> guideline_id = glyph.guidelines[0].identifier >>> assert guideline_id is not None >>> assert glyph.lib["public.objectLibs"][guideline_id] is guideline_lib
- removeComponent(component: ufoLib2.objects.component.Component) None [source]¶
Removes
Component
object from the glyph’s list of components.
- setBottomMargin(value: float, layer: Optional[ufoLib2.typing.GlyphSet] = None) None [source]¶
Sets the the space in font units from the bottom of the canvas to the bottom of the glyph.
- Parameters
value – The desired bottom margin in font units.
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- setLeftMargin(value: float, layer: Optional[ufoLib2.typing.GlyphSet] = None) None [source]¶
Sets the the space in font units from the point of origin to the left side of the glyph.
- Parameters
value – The desired left margin in font units.
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- setRightMargin(value: float, layer: Optional[ufoLib2.typing.GlyphSet] = None) None [source]¶
Sets the the space in font units from the glyph’s advance width to the right side of the glyph.
- Parameters
value – The desired right margin in font units.
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- setTopMargin(value: float, layer: Optional[ufoLib2.typing.GlyphSet] = None) None [source]¶
Sets the the space in font units from the top of the canvas to the top of the glyph.
- Parameters
value – The desired top margin in font units.
layer – The layer of the glyph to look up components, if any. Not needed for pure-contour glyphs.
- property unicode: Optional[int]¶
The first assigned Unicode code point or None.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#unicode.
- Setter:
Sets the value to be the first of the assigned Unicode code points. Will remove a duplicate if exists. Will clear the list of Unicode points if value is None.
- unicodes¶
The Unicode code points assigned to the glyph. Note that a glyph can have multiple.
- property verticalOrigin: Optional[float]¶
The vertical origin of the glyph.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#publicverticalorigin.
- Getter:
Returns the vertical origin or None.
- Setter:
Sets the vertical origin. If value is None, deletes the key from the lib if present.
- width¶
The width of the glyph.
Component¶
- class ufoLib2.objects.Component(baseGlyph: str, transformation: Union[fontTools.misc.transform.Transform, Sequence[float]] = <Transform [1 0 0 1 0 0]>, identifier: Optional[str] = None)[source]¶
Represents a reference to another glyph in the same layer.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#component.
Note
Components always refer to glyphs in the same layer. Referencing different layers is currently not possible in the UFO data model.
- baseGlyph¶
The name of the glyph in the same layer to insert.
- draw(pen: fontTools.pens.basePen.AbstractPen) None [source]¶
Draws component with given pen.
- drawPoints(pointPen: fontTools.pens.pointPen.AbstractPointPen) None [source]¶
Draws points of component with given point pen.
- getBounds(layer: ufoLib2.typing.GlyphSet) Optional[ufoLib2.objects.misc.BoundingBox] [source]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the component, taking the actual contours into account.
- Parameters
layer – The layer of the containing glyph to look up components.
- getControlBounds(layer: ufoLib2.typing.GlyphSet) Optional[ufoLib2.objects.misc.BoundingBox] [source]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the component, taking only the control points into account.
- Parameters
layer – The layer of the containing glyph to look up components.
- identifier¶
The globally unique identifier of the component.
- move(delta: Tuple[float, float]) None [source]¶
Moves this component by (x, y) font units.
NOTE: This interprets the delta to be the visual delta, as in, it replaces the x and y offsets of the component’s transformation directly, rather than going through
fontTools.misc.transform.Transform.translate()
. Otherwise, composites that use flipped components (imagine aquotedblleft
composite using two x- and y-invertedcomma
components) would move in the opposite direction of the delta.
- transformation¶
The affine transformation to apply to the
Component.baseGlyph
.
Contour¶
- class ufoLib2.objects.Contour(points: List[ufoLib2.objects.point.Point] = NOTHING, identifier: Optional[str] = None)[source]¶
Represents a contour as a list of points.
- Behavior:
The Contour object has list-like behavior. This behavior allows you to interact with point data directly. For example, to get a particular point:
point = contour[0]
To iterate over all points:
for point in contour: ...
To get the number of points:
pointCount = len(contour)
To delete a particular point:
del contour[0]
To set a particular point to another Point object:
contour[0] = anotherPoint
- property bounds: Optional[ufoLib2.objects.misc.BoundingBox]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the glyph, taking the actual contours into account.
For defcon API compatibility only.
- property controlPointBounds: Optional[ufoLib2.objects.misc.BoundingBox]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the glyph, taking only the control points into account.
For defcon API compatibility only.
- draw(pen: fontTools.pens.basePen.AbstractPen) None [source]¶
Draws contour into given pen.
- drawPoints(pointPen: fontTools.pens.pointPen.AbstractPointPen) None [source]¶
Draws points of contour into given point pen.
- getBounds(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[ufoLib2.objects.misc.BoundingBox] [source]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the glyph, taking the actual contours into account.
- Parameters
layer – Not applicable to contours, here for API symmetry.
- getControlBounds(layer: Optional[ufoLib2.typing.GlyphSet] = None) Optional[ufoLib2.objects.misc.BoundingBox] [source]¶
Returns the (xMin, yMin, xMax, yMax) bounding box of the glyph, taking only the control points into account.
- Parameters
layer – Not applicable to contours, here for API symmetry.
- identifier¶
The globally unique identifier of the contour.
- insert(index: int, value: ufoLib2.objects.point.Point) None [source]¶
Insert Point object
value
into the contour atindex
.
- property open: bool¶
Returns whether the contour is open or closed.
- points¶
The list of points in the contour.
Point¶
- class ufoLib2.objects.Point(x: float, y: float, type: Optional[str] = None, smooth: bool = False, name: Optional[str] = None, identifier: Optional[str] = None)[source]¶
Represents a single point.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#point.
- identifier¶
The globally unique identifier of the point.
- name¶
The name of the point, no uniqueness required.
- property segmentType: Optional[str]¶
Returns the type of the point.
For defcon API compatibility only.
- smooth¶
Whether a smooth curvature should be maintained at this point.
- type¶
The type of the point.
None
means “offcurve”.See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#point-types.
- x¶
The x coordinate of the point.
- y¶
The y coordinate of the point.
Anchor¶
- class ufoLib2.objects.Anchor(x: float, y: float, name: Optional[str] = None, color: Optional[str] = None, identifier: Optional[str] = None)[source]¶
Represents a single anchor.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#anchor.
- color¶
The color of the anchor.
- identifier¶
The globally unique identifier of the anchor.
- name¶
The name of the anchor.
- x¶
The x coordinate of the anchor.
- y¶
The y coordinate of the anchor.
Guideline¶
- class ufoLib2.objects.Guideline(x: Optional[float] = None, y: Optional[float] = None, angle: Optional[float] = None, name: Optional[str] = None, color: Optional[str] = None, identifier: Optional[str] = None)[source]¶
Represents a single guideline.
See http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#guideline. Has some data composition restrictions.
- angle¶
The angle of the guideline.
- color¶
The color of the guideline.
- identifier¶
The globally unique identifier of the guideline.
- name¶
The name of the guideline, no uniqueness required.
- x¶
The origin x coordinate of the guideline.
- y¶
The origin y coordinate of the guideline.
ImageSet¶
- class ufoLib2.objects.imageSet.ImageSet(data: Dict[str, Union[bytes, ufoLib2.objects.misc.Placeholder]] = NOTHING)[source]¶
Represents a mapping of POSIX filename strings to arbitrary image data.
Note
Images cannot be put into subdirectories of the images folder.
- Behavior:
ImageSet behaves like a dictionary of type
Dict[str, bytes]
.>>> from ufoLib2 import Font >>> font = Font() >>> # Note: invalid PNG data for demonstration. Use the actual PNG bytes. >>> font.images["test.png"] = b"123" >>> font.images["test2.png"] = b"456" >>> font.images["test.png"] b'123' >>> del font.images["test.png"] >>> list(font.images.items()) [('test2.png', b'456')]
- clear() None. Remove all items from D. ¶
- property fileNames: List[str]¶
Returns a list of filenames in the data store.
- get(k[, d]) D[k] if k in D, else d. d defaults to None. ¶
- items() a set-like object providing a view on D's items ¶
- keys() a set-like object providing a view on D's keys ¶
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
If key is not found, d is returned if given, otherwise KeyError is raised.
- popitem() (k, v), remove and return some (key, value) pair ¶
as a 2-tuple; but raise KeyError if D is empty.
- classmethod read(reader: fontTools.ufoLib.UFOReader, lazy: bool = True) Tds ¶
Instantiate the data store from a
fontTools.ufoLib.UFOReader
.
- setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D ¶
- unlazify() None ¶
Load all data into memory.
- update([E, ]**F) None. Update D from mapping/iterable E and F. ¶
If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v
- values() an object providing a view on D's values ¶
- write(writer: fontTools.ufoLib.UFOWriter, saveAs: Optional[bool] = None) None ¶
Write the data store to a
fontTools.ufoLib.UFOWriter
.
Image¶
- class ufoLib2.objects.Image(fileName: Optional[str] = None, transformation: Union[fontTools.misc.transform.Transform, Sequence[float]] = <Transform [1 0 0 1 0 0]>, color: Optional[str] = None, transformation_keys_: Tuple[str, str, str, str, str, str] = ('xScale', 'xyScale', 'yxScale', 'yScale', 'xOffset', 'yOffset'), valid_keys_: Tuple[str, str, str, str, str, str, str, str] = ('fileName', 'xScale', 'xyScale', 'yxScale', 'yScale', 'xOffset', 'yOffset', 'color'))[source]¶
Represents a background image reference.
See http://unifiedfontobject.org/versions/ufo3/images/ and http://unifiedfontobject.org/versions/ufo3/glyphs/glif/#image.
- color¶
The color applied to the image.
- fileName¶
The filename of the image.
- transformation¶
The affine transformation applied to the image.
Miscellaneous objects¶
- class ufoLib2.objects.misc.BoundingBox(xMin: float, yMin: float, xMax: float, yMax: float)[source]¶
Represents a bounding box as a tuple of (xMin, yMin, xMax, yMax).
- property xMax¶
Alias for field number 2
- property xMin¶
Alias for field number 0
- property yMax¶
Alias for field number 3
- property yMin¶
Alias for field number 1
Types¶
- class ufoLib2.typing.Drawable(*args, **kwds)[source]¶
Stand-in for an object that can draw itself with a given pen.
See
fontTools.pens.basePen
for an introduction to pens.- draw(pen: fontTools.pens.basePen.AbstractPen) None [source]¶
- class ufoLib2.typing.DrawablePoints(*args, **kwds)[source]¶
Stand-in for an object that can draw its points with a given pen.
See
fontTools.pens.pointPen
for an introduction to point pens.- drawPoints(pen: fontTools.pens.pointPen.AbstractPointPen) None [source]¶
- class ufoLib2.typing.GlyphSet(*args, **kwds)[source]¶
Any container that holds drawable objects.
In ufoLib2, this usually refers to
Font
(referencing glyphs in the default layer) andLayer
(referencing glyphs in that particular layer). Ideally, this would be a simple subclass ofMapping[str, Union[Drawable, DrawablePoints]]
, but due to historic reasons, the established objects don’t conform toMapping
exactly.The protocol contains what is used in
fontTools.pens
at v4.18.2 (grep for.glyphSet
).
- class ufoLib2.typing.HasIdentifier(*args, **kwds)[source]¶
Any object that has a unique identifier in some context that can be used as a key in a public.objectLibs dictionary.
- identifier: Optional[str]¶
- ufoLib2.typing.PathLike = typing.Union[str, bytes, _ForwardRef('os.PathLike[str]'), _ForwardRef('os.PathLike[bytes]')]¶
Represents a path in various possible forms.
- ufoLib2.typing.T¶
Generic variable for mypy for trivial generic function signatures.
alias of TypeVar(‘T’)
Pens¶
- class ufoLib2.pointPens.glyphPointPen.GlyphPointPen(glyph: Glyph)[source]¶
A point pen.
See
fontTools.pens.basePen
andfontTools.pens.pointPen
for an introduction to pens.- addComponent(baseGlyph: str, transformation: fontTools.misc.transform.Transform, identifier: Optional[str] = None, **kwargs: Any) None [source]¶
Add a sub glyph.
Constants¶
- ufoLib2.constants.DEFAULT_LAYER_NAME: str = 'public.default'¶
The name of the default layer.
- ufoLib2.constants.OBJECT_LIBS_KEY: str = 'public.objectLibs'¶
The lib key for object libs.
See: