You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			313 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			313 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Python
		
	
from enum import Enum, Flag
 | 
						|
import sys
 | 
						|
from typing import BinaryIO, Literal, TypedDict, final, overload, cast
 | 
						|
from typing_extensions import Buffer  # < Py 3.12
 | 
						|
 | 
						|
import numpy as np
 | 
						|
from numpy.typing import NDArray
 | 
						|
 | 
						|
__freetype_build_type__: str
 | 
						|
__freetype_version__: str
 | 
						|
 | 
						|
class FaceFlags(Flag):
 | 
						|
    SCALABLE = cast(int, ...)
 | 
						|
    FIXED_SIZES = cast(int, ...)
 | 
						|
    FIXED_WIDTH = cast(int, ...)
 | 
						|
    SFNT = cast(int, ...)
 | 
						|
    HORIZONTAL = cast(int, ...)
 | 
						|
    VERTICAL = cast(int, ...)
 | 
						|
    KERNING = cast(int, ...)
 | 
						|
    FAST_GLYPHS = cast(int, ...)
 | 
						|
    MULTIPLE_MASTERS = cast(int, ...)
 | 
						|
    GLYPH_NAMES = cast(int, ...)
 | 
						|
    EXTERNAL_STREAM = cast(int, ...)
 | 
						|
    HINTER = cast(int, ...)
 | 
						|
    CID_KEYED = cast(int, ...)
 | 
						|
    TRICKY = cast(int, ...)
 | 
						|
    COLOR = cast(int, ...)
 | 
						|
    # VARIATION = cast(int, ...)  # FT 2.9
 | 
						|
    # SVG = cast(int, ...)  # FT 2.12
 | 
						|
    # SBIX = cast(int, ...)  # FT 2.12
 | 
						|
    # SBIX_OVERLAY = cast(int, ...)  # FT 2.12
 | 
						|
 | 
						|
class Kerning(Enum):
 | 
						|
    DEFAULT = cast(int, ...)
 | 
						|
    UNFITTED = cast(int, ...)
 | 
						|
    UNSCALED = cast(int, ...)
 | 
						|
 | 
						|
class LoadFlags(Flag):
 | 
						|
    DEFAULT = cast(int, ...)
 | 
						|
    NO_SCALE = cast(int, ...)
 | 
						|
    NO_HINTING = cast(int, ...)
 | 
						|
    RENDER = cast(int, ...)
 | 
						|
    NO_BITMAP = cast(int, ...)
 | 
						|
    VERTICAL_LAYOUT = cast(int, ...)
 | 
						|
    FORCE_AUTOHINT = cast(int, ...)
 | 
						|
    CROP_BITMAP = cast(int, ...)
 | 
						|
    PEDANTIC = cast(int, ...)
 | 
						|
    IGNORE_GLOBAL_ADVANCE_WIDTH = cast(int, ...)
 | 
						|
    NO_RECURSE = cast(int, ...)
 | 
						|
    IGNORE_TRANSFORM = cast(int, ...)
 | 
						|
    MONOCHROME = cast(int, ...)
 | 
						|
    LINEAR_DESIGN = cast(int, ...)
 | 
						|
    NO_AUTOHINT = cast(int, ...)
 | 
						|
    COLOR = cast(int, ...)
 | 
						|
    COMPUTE_METRICS = cast(int, ...)  # FT 2.6.1
 | 
						|
    # BITMAP_METRICS_ONLY = cast(int, ...)  # FT 2.7.1
 | 
						|
    # NO_SVG = cast(int, ...)  # FT 2.13.1
 | 
						|
    # The following should be unique, but the above can be OR'd together.
 | 
						|
    TARGET_NORMAL = cast(int, ...)
 | 
						|
    TARGET_LIGHT = cast(int, ...)
 | 
						|
    TARGET_MONO = cast(int, ...)
 | 
						|
    TARGET_LCD = cast(int, ...)
 | 
						|
    TARGET_LCD_V = cast(int, ...)
 | 
						|
 | 
						|
class StyleFlags(Flag):
 | 
						|
    NORMAL = cast(int, ...)
 | 
						|
    ITALIC = cast(int, ...)
 | 
						|
    BOLD = cast(int, ...)
 | 
						|
 | 
						|
class _SfntHeadDict(TypedDict):
 | 
						|
    version: tuple[int, int]
 | 
						|
    fontRevision: tuple[int, int]
 | 
						|
    checkSumAdjustment: int
 | 
						|
    magicNumber: int
 | 
						|
    flags: int
 | 
						|
    unitsPerEm: int
 | 
						|
    created: tuple[int, int]
 | 
						|
    modified: tuple[int, int]
 | 
						|
    xMin: int
 | 
						|
    yMin: int
 | 
						|
    xMax: int
 | 
						|
    yMax: int
 | 
						|
    macStyle: int
 | 
						|
    lowestRecPPEM: int
 | 
						|
    fontDirectionHint: int
 | 
						|
    indexToLocFormat: int
 | 
						|
    glyphDataFormat: int
 | 
						|
 | 
						|
class _SfntMaxpDict(TypedDict):
 | 
						|
    version: tuple[int, int]
 | 
						|
    numGlyphs: int
 | 
						|
    maxPoints: int
 | 
						|
    maxContours: int
 | 
						|
    maxComponentPoints: int
 | 
						|
    maxComponentContours: int
 | 
						|
    maxZones: int
 | 
						|
    maxTwilightPoints: int
 | 
						|
    maxStorage: int
 | 
						|
    maxFunctionDefs: int
 | 
						|
    maxInstructionDefs: int
 | 
						|
    maxStackElements: int
 | 
						|
    maxSizeOfInstructions: int
 | 
						|
    maxComponentElements: int
 | 
						|
    maxComponentDepth: int
 | 
						|
 | 
						|
class _SfntOs2Dict(TypedDict):
 | 
						|
    version: int
 | 
						|
    xAvgCharWidth: int
 | 
						|
    usWeightClass: int
 | 
						|
    usWidthClass: int
 | 
						|
    fsType: int
 | 
						|
    ySubscriptXSize: int
 | 
						|
    ySubscriptYSize: int
 | 
						|
    ySubscriptXOffset: int
 | 
						|
    ySubscriptYOffset: int
 | 
						|
    ySuperscriptXSize: int
 | 
						|
    ySuperscriptYSize: int
 | 
						|
    ySuperscriptXOffset: int
 | 
						|
    ySuperscriptYOffset: int
 | 
						|
    yStrikeoutSize: int
 | 
						|
    yStrikeoutPosition: int
 | 
						|
    sFamilyClass: int
 | 
						|
    panose: bytes
 | 
						|
    ulCharRange: tuple[int, int, int, int]
 | 
						|
    achVendID: bytes
 | 
						|
    fsSelection: int
 | 
						|
    fsFirstCharIndex: int
 | 
						|
    fsLastCharIndex: int
 | 
						|
 | 
						|
class _SfntHheaDict(TypedDict):
 | 
						|
    version: tuple[int, int]
 | 
						|
    ascent: int
 | 
						|
    descent: int
 | 
						|
    lineGap: int
 | 
						|
    advanceWidthMax: int
 | 
						|
    minLeftBearing: int
 | 
						|
    minRightBearing: int
 | 
						|
    xMaxExtent: int
 | 
						|
    caretSlopeRise: int
 | 
						|
    caretSlopeRun: int
 | 
						|
    caretOffset: int
 | 
						|
    metricDataFormat: int
 | 
						|
    numOfLongHorMetrics: int
 | 
						|
 | 
						|
class _SfntVheaDict(TypedDict):
 | 
						|
    version: tuple[int, int]
 | 
						|
    vertTypoAscender: int
 | 
						|
    vertTypoDescender: int
 | 
						|
    vertTypoLineGap: int
 | 
						|
    advanceHeightMax: int
 | 
						|
    minTopSideBearing: int
 | 
						|
    minBottomSizeBearing: int
 | 
						|
    yMaxExtent: int
 | 
						|
    caretSlopeRise: int
 | 
						|
    caretSlopeRun: int
 | 
						|
    caretOffset: int
 | 
						|
    metricDataFormat: int
 | 
						|
    numOfLongVerMetrics: int
 | 
						|
 | 
						|
class _SfntPostDict(TypedDict):
 | 
						|
    format: tuple[int, int]
 | 
						|
    italicAngle: tuple[int, int]
 | 
						|
    underlinePosition: int
 | 
						|
    underlineThickness: int
 | 
						|
    isFixedPitch: int
 | 
						|
    minMemType42: int
 | 
						|
    maxMemType42: int
 | 
						|
    minMemType1: int
 | 
						|
    maxMemType1: int
 | 
						|
 | 
						|
class _SfntPcltDict(TypedDict):
 | 
						|
    version: tuple[int, int]
 | 
						|
    fontNumber: int
 | 
						|
    pitch: int
 | 
						|
    xHeight: int
 | 
						|
    style: int
 | 
						|
    typeFamily: int
 | 
						|
    capHeight: int
 | 
						|
    symbolSet: int
 | 
						|
    typeFace: bytes
 | 
						|
    characterComplement: bytes
 | 
						|
    strokeWeight: int
 | 
						|
    widthType: int
 | 
						|
    serifStyle: int
 | 
						|
 | 
						|
@final
 | 
						|
class FT2Font(Buffer):
 | 
						|
    def __init__(
 | 
						|
        self,
 | 
						|
        filename: str | BinaryIO,
 | 
						|
        hinting_factor: int = ...,
 | 
						|
        *,
 | 
						|
        _fallback_list: list[FT2Font] | None = ...,
 | 
						|
        _kerning_factor: int = ...
 | 
						|
    ) -> None: ...
 | 
						|
    if sys.version_info[:2] >= (3, 12):
 | 
						|
        def __buffer__(self, flags: int) -> memoryview: ...
 | 
						|
    def _get_fontmap(self, string: str) -> dict[str, FT2Font]: ...
 | 
						|
    def clear(self) -> None: ...
 | 
						|
    def draw_glyph_to_bitmap(
 | 
						|
        self, image: FT2Image, x: int, y: int, glyph: Glyph, antialiased: bool = ...
 | 
						|
    ) -> None: ...
 | 
						|
    def draw_glyphs_to_bitmap(self, antialiased: bool = ...) -> None: ...
 | 
						|
    def get_bitmap_offset(self) -> tuple[int, int]: ...
 | 
						|
    def get_char_index(self, codepoint: int) -> int: ...
 | 
						|
    def get_charmap(self) -> dict[int, int]: ...
 | 
						|
    def get_descent(self) -> int: ...
 | 
						|
    def get_glyph_name(self, index: int) -> str: ...
 | 
						|
    def get_image(self) -> NDArray[np.uint8]: ...
 | 
						|
    def get_kerning(self, left: int, right: int, mode: Kerning) -> int: ...
 | 
						|
    def get_name_index(self, name: str) -> int: ...
 | 
						|
    def get_num_glyphs(self) -> int: ...
 | 
						|
    def get_path(self) -> tuple[NDArray[np.float64], NDArray[np.int8]]: ...
 | 
						|
    def get_ps_font_info(
 | 
						|
        self,
 | 
						|
    ) -> tuple[str, str, str, str, str, int, int, int, int]: ...
 | 
						|
    def get_sfnt(self) -> dict[tuple[int, int, int, int], bytes]: ...
 | 
						|
    @overload
 | 
						|
    def get_sfnt_table(self, name: Literal["head"]) -> _SfntHeadDict | None: ...
 | 
						|
    @overload
 | 
						|
    def get_sfnt_table(self, name: Literal["maxp"]) -> _SfntMaxpDict | None: ...
 | 
						|
    @overload
 | 
						|
    def get_sfnt_table(self, name: Literal["OS/2"]) -> _SfntOs2Dict | None: ...
 | 
						|
    @overload
 | 
						|
    def get_sfnt_table(self, name: Literal["hhea"]) -> _SfntHheaDict | None: ...
 | 
						|
    @overload
 | 
						|
    def get_sfnt_table(self, name: Literal["vhea"]) -> _SfntVheaDict | None: ...
 | 
						|
    @overload
 | 
						|
    def get_sfnt_table(self, name: Literal["post"]) -> _SfntPostDict | None: ...
 | 
						|
    @overload
 | 
						|
    def get_sfnt_table(self, name: Literal["pclt"]) -> _SfntPcltDict | None: ...
 | 
						|
    def get_width_height(self) -> tuple[int, int]: ...
 | 
						|
    def load_char(self, charcode: int, flags: LoadFlags = ...) -> Glyph: ...
 | 
						|
    def load_glyph(self, glyphindex: int, flags: LoadFlags = ...) -> Glyph: ...
 | 
						|
    def select_charmap(self, i: int) -> None: ...
 | 
						|
    def set_charmap(self, i: int) -> None: ...
 | 
						|
    def set_size(self, ptsize: float, dpi: float) -> None: ...
 | 
						|
    def set_text(
 | 
						|
        self, string: str, angle: float = ..., flags: LoadFlags = ...
 | 
						|
    ) -> NDArray[np.float64]: ...
 | 
						|
    @property
 | 
						|
    def ascender(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def bbox(self) -> tuple[int, int, int, int]: ...
 | 
						|
    @property
 | 
						|
    def descender(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def face_flags(self) -> FaceFlags: ...
 | 
						|
    @property
 | 
						|
    def family_name(self) -> str: ...
 | 
						|
    @property
 | 
						|
    def fname(self) -> str: ...
 | 
						|
    @property
 | 
						|
    def height(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def max_advance_height(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def max_advance_width(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def num_charmaps(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def num_faces(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def num_fixed_sizes(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def num_glyphs(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def num_named_instances(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def postscript_name(self) -> str: ...
 | 
						|
    @property
 | 
						|
    def scalable(self) -> bool: ...
 | 
						|
    @property
 | 
						|
    def style_flags(self) -> StyleFlags: ...
 | 
						|
    @property
 | 
						|
    def style_name(self) -> str: ...
 | 
						|
    @property
 | 
						|
    def underline_position(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def underline_thickness(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def units_per_EM(self) -> int: ...
 | 
						|
 | 
						|
@final
 | 
						|
class FT2Image(Buffer):
 | 
						|
    def __init__(self, width: int, height: int) -> None: ...
 | 
						|
    def draw_rect_filled(self, x0: int, y0: int, x1: int, y1: int) -> None: ...
 | 
						|
    if sys.version_info[:2] >= (3, 12):
 | 
						|
        def __buffer__(self, flags: int) -> memoryview: ...
 | 
						|
 | 
						|
@final
 | 
						|
class Glyph:
 | 
						|
    @property
 | 
						|
    def width(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def height(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def horiBearingX(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def horiBearingY(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def horiAdvance(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def linearHoriAdvance(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def vertBearingX(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def vertBearingY(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def vertAdvance(self) -> int: ...
 | 
						|
    @property
 | 
						|
    def bbox(self) -> tuple[int, int, int, int]: ...
 |