# colorLib.builder: Build COLR/CPAL tables from scratch

colorLib.builder: Build COLR/CPAL tables from scratch

class fontTools.colorLib.builder.ColorPaletteType(value)[source]

An enumeration.

as_integer_ratio()

Return integer ratio.

Return a pair of integers, whose ratio is exactly equal to the original int and with a positive denominator.

```>>> (10).as_integer_ratio()
(10, 1)
>>> (-10).as_integer_ratio()
(-10, 1)
>>> (0).as_integer_ratio()
(0, 1)
```
bit_count()

Number of ones in the binary representation of the absolute value of self.

Also known as the population count.

```>>> bin(13)
'0b1101'
>>> (13).bit_count()
3
```
bit_length()

Number of bits necessary to represent self in binary.

```>>> bin(37)
'0b100101'
>>> (37).bit_length()
6
```
conjugate()

Returns self, the complex conjugate of any int.

denominator

the denominator of a rational number in lowest terms

from_bytes(byteorder, *, signed=False)

Return the integer represented by the given array of bytes.

bytes

Holds the array of bytes to convert. The argument must either support the buffer protocol or be an iterable object producing bytes. Bytes and bytearray are examples of built-in objects that support the buffer protocol.

byteorder

The byte order used to represent the integer. If byteorder is ‘big’, the most significant byte is at the beginning of the byte array. If byteorder is ‘little’, the most significant byte is at the end of the byte array. To request the native byte order of the host system, use `sys.byteorder’ as the byte order value.

signed

Indicates whether two’s complement is used to represent the integer.

imag

the imaginary part of a complex number

numerator

the numerator of a rational number in lowest terms

real

the real part of a complex number

to_bytes(length, byteorder, *, signed=False)

Return an array of bytes representing an integer.

length

Length of bytes object to use. An OverflowError is raised if the integer is not representable with the given number of bytes.

byteorder

The byte order used to represent the integer. If byteorder is ‘big’, the most significant byte is at the beginning of the byte array. If byteorder is ‘little’, the most significant byte is at the end of the byte array. To request the native byte order of the host system, use `sys.byteorder’ as the byte order value.

signed

Determines whether two’s complement is used to represent the integer. If signed is False and a negative integer is given, an OverflowError is raised.

fontTools.colorLib.builder.buildCOLR(colorGlyphs: Dict[str, Sequence[int | Mapping[str, Any] | Paint | Tuple[str, int | Mapping[str, Any] | Paint | Tuple[str, _PaintInput]]] | int | Mapping[str, Any] | Paint | Tuple[str, int | Mapping[str, Any] | Paint | Tuple[str, _PaintInput]]], version: int | None = None, *, glyphMap: Mapping[str, int] | None = None, varStore: VarStore | None = None, varIndexMap: DeltaSetIndexMap | None = None, clipBoxes: Dict[str, Tuple[int, int, int, int, int] | Tuple[int, int, int, int] | ClipBox] | None = None, allowLayerReuse: bool = True) [source]

Build COLR table from color layers mapping.

Parameters:
• colorGlyphs – map of base glyph name to, either list of (layer glyph name, color palette index) tuples for COLRv0; or a single `Paint` (dict) or list of `Paint` for COLRv1.

• version – the version of COLR table. If None, the version is determined by the presence of COLRv1 paints or variation data (varStore), which require version 1; otherwise, if all base glyphs use only simple color layers, version 0 is used.

• glyphMap – a map from glyph names to glyph indices, as returned from TTFont.getReverseGlyphMap(), to optionally sort base records by GID.

• varStore – Optional ItemVarationStore for deltas associated with v1 layer.

• varIndexMap – Optional DeltaSetIndexMap for deltas associated with v1 layer.

• clipBoxes – Optional map of base glyph name to clip box 4- or 5-tuples: (xMin, yMin, xMax, yMax) or (xMin, yMin, xMax, yMax, varIndexBase).

Returns:

A new COLR table.

fontTools.colorLib.builder.buildCPAL(palettes: Sequence[Sequence[Tuple[float, float, float, float]]], paletteTypes: Sequence[ColorPaletteType] | None = None, paletteLabels: Sequence[None | str | Dict[str, str]] | None = None, paletteEntryLabels: Sequence[None | str | Dict[str, str]] | None = None, nameTable: table__n_a_m_e | None = None) [source]

Build CPAL table from list of color palettes.

Parameters:
• palettes – list of lists of colors encoded as tuples of (R, G, B, A) floats in the range [0..1].

• paletteTypes – optional list of ColorPaletteType, one for each palette.

• paletteLabels – optional list of palette labels. Each lable can be either: None (no label), a string (for for default English labels), or a localized string (as a dict keyed with BCP47 language codes).

• paletteEntryLabels – optional list of palette entry labels, one for each palette entry (see paletteLabels).

• nameTable – optional name table where to store palette and palette entry labels. Required if either paletteLabels or paletteEntryLabels is set.

Returns:

A new CPAL v0 or v1 table, if custom palette types or labels are specified.

fontTools.colorLib.builder.populateCOLRv0(table: COLR, colorGlyphsV0: Dict[str, Sequence[Tuple[str, int]]], glyphMap: Mapping[str, int] | None = None)[source]

Build v0 color layers and add to existing COLR table.

Parameters:
• table – a raw `otTables.COLR()` object (not ttLib’s `table_C_O_L_R_`).

• colorGlyphsV0 – map of base glyph names to lists of (layer glyph names, color palette index) tuples. Can be empty.

• glyphMap – a map from glyph names to glyph indices, as returned from `TTFont.getReverseGlyphMap()`, to optionally sort base records by GID.