Source code for fontParts.base.annotations

# pylint: disable=C0103, C0114
from __future__ import annotations

import datetime
from typing import Protocol, TypeVar

from fontTools.pens.basePen import AbstractPen
from fontTools.pens.pointPen import AbstractPointPen

# Generic
T = TypeVar("T")

CollectionType = list[T] | tuple[T, ...]

# Builtins
IntFloatType = int | float

# Point / Offset / Anchor (bPoints)
Coordinate = tuple[IntFloatType, IntFloatType]
CoordinateLike = list[IntFloatType] | Coordinate

# Bounding box — (xMin, yMin, xMax, yMax).
BoundingBox = tuple[float, float, float, float]
BoundingBoxLike = list[IntFloatType] | BoundingBox

# RGBA color — (r, g, b, a) in [0, 1]
RGBA = tuple[float, float, float, float]
RGBALike = list[IntFloatType] | RGBA

# Affine transformation matrix — (xx, xy, yx, yy, dx, dy).
AffineTransformation = tuple[float, float, float, float, float, float]
AffineTransformationLike = list[IntFloatType] | AffineTransformation

# Kerning pair — (first, second) glyph or group names.
KerningPair = tuple[str, str]
KerningPairLike = list[str] | KerningPair

# Scale factor — (sx, sy) multiplicative pair.
ScaleFactor = tuple[float, float]
ScaleFactorPair = list[IntFloatType] | ScaleFactor
ScaleFactorLike = IntFloatType | ScaleFactorPair

# Skew angle — (xAngle, yAngle) in degrees.
SkewAngle = tuple[float, float]
SkewAnglePair = list[IntFloatType] | SkewAngle
SkewAngleLike = IntFloatType | SkewAnglePair

# Interpolation factor — (xFactor, yFactor).
InterpolationFactor = tuple[float, float]
InterpolationFactorPair = list[IntFloatType] | InterpolationFactor
InterpolationFactorLike = IntFloatType | InterpolationFactorPair

# Compatibility
DiffType = list[tuple[int, str | None, str | None]]

# Pens
PenType = AbstractPen
PointPenType = AbstractPointPen

# Mapping
CharacterMappingType = dict[int, tuple[str, ...]]
ReverseComponentMappingType = dict[str, tuple[str, ...]]

# Kerning
KerningDictType = dict[KerningPair, KerningPair]

# Lib
LibValueType = (
    str
    | IntFloatType
    | bool
    | CollectionType["LibValueType"]
    | dict[str, "LibValueType"]
    | bytes
    | bytearray
    | datetime.datetime
)


[docs] class LibValue: # Documentation class for LibValueType """A :class:`~fontParts.base.BaseLib` value may be one of the following *non-collection* types: - :class:`str` - :class:`int` - :class:`float` - :class:`bool` - :class:`bytes` - :class:`bytearray` - :class:`datetime.datetime` In addition, a value may also be a :class:`list` or :class:`tuple` containing any of the types above, or a :class:`dict` mapping :class:`str` keys to values of those same types (including nested lists, tuples, or dicts). """
# Interpolation InterpolatableType = TypeVar("InterpolatableType", bound="Interpolatable") class Interpolatable(Protocol): """Represent a protocol for interpolatable types.""" def __add__( self: InterpolatableType, other: InterpolatableType ) -> InterpolatableType: ... def __sub__( self: InterpolatableType, other: InterpolatableType ) -> InterpolatableType: ... def __mul__( self: InterpolatableType, other: InterpolationFactorLike ) -> InterpolatableType: ...