Skip to documentation
SLOP

tiny.filigree.font.directory

Reference tiny.filigree font directory

Defined in font.

API (7)

Actions

Public operations.

No direct callersNo direct callsfontdirectory
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallsNo direct callsfont.descriptiondescribeAtAllocprivate sourcelib.filigree.src.font.faceinitAtImplfont.directoryfontDirectoryOffset
Static calls · unresolved targets: 2 · external targets: 0.
Called byCallsNo direct callersfont.directorytablefont.directoryoptional
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsfont.descriptiondescribeAtAllocfont.metricshorizontalTypoMetricsfont.metricsverticalMetricsfont.directorytableAtfont.directoryoptionalAt
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callersfont.directorytableAtTagfont.directoryoptionalAtTag
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.filigree.src.font.descriptiontest: face description reads family a...test sourcelib.filigree.src.font.descriptiontest: face description rejects missin...font.directoryoptionaltest sourcelib.filigree.src.font.directorytest: table lookup rejects empty dire...font.directorytableAtfont.directorytable
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsfont.descriptiondescribeAtAllocfont.directoryoptionalAtfont.directorytableprivate sourcelib.filigree.src.font.faceinitDirectoryImplfont.directorytableAtTagfont.directorytableAt
Static calls · unresolved targets: 1 · external targets: 0.
Called byCallsNo direct callsfont.directoryoptionalAtTagfont.directorytableAtfont.directorytableAtTag
Static calls · unresolved targets: 2 · external targets: 0.

Source: lib/filigree/src/font/directory.zig

zig
const std = @import("std");const binary = @import("binary.zig");const model = @import("model.zig");const FontError = model.FontError;const Table = binary.Table;const Tag = model.Tag;const readU16 = binary.readU16;const readU32 = binary.readU32;const tag = model.tag;pub fn table(data: []const u8, comptime name: []const u8) FontError!Table {    return tableAt(data, 0, name);}pub fn tableAt(data: []const u8, directory_offset: usize, comptime name: []const u8) FontError!Table {    return tableAtTag(data, directory_offset, tag(name));}pub fn tableAtTag(data: []const u8, directory_offset: usize, wanted: Tag) FontError!Table {    if (directory_offset > data.len or data.len - directory_offset < 12) return error.InvalidFont;    const num_tables = try readU16(data, directory_offset + 4);    if (@as(usize, num_tables) > (data.len - directory_offset - 12) / 16) return error.InvalidFont;    for (0..num_tables) |i| {        const record = directory_offset + 12 + i * 16;        if (try readU32(data, record) != wanted) continue;        const offset = try readU32(data, record + 8);        const len = try readU32(data, record + 12);        const start: usize = @intCast(offset);        const size: usize = @intCast(len);        if (start > data.len or size > data.len - start) return error.InvalidFont;        return .{ .offset = start, .len = size };    }    return error.MissingTable;}pub fn optional(data: []const u8, comptime name: []const u8) ?Table {    return table(data, name) catch null;}pub fn optionalAt(data: []const u8, directory_offset: usize, comptime name: []const u8) ?Table {    return tableAt(data, directory_offset, name) catch null;}pub fn optionalAtTag(data: []const u8, directory_offset: usize, table_tag: Tag) ?Table {    return tableAtTag(data, directory_offset, table_tag) catch null;}pub fn fontDirectoryOffset(data: []const u8, face_index: u32) FontError!usize {    if (data.len < 12) return error.InvalidFont;    if (try readU32(data, 0) != tag("ttcf")) {        if (face_index != 0) return error.InvalidFont;        return 0;    }    const version = try readU32(data, 4);    if (version != 0x00010000 and version != 0x00020000) return error.InvalidFont;    const face_count = try readU32(data, 8);    if (face_count == 0 or face_index >= face_count) return error.InvalidFont;    const face_count_usize: usize = @intCast(face_count);    if (face_count_usize > (data.len - 12) / 4) return error.InvalidFont;    const record = 12 + @as(usize, @intCast(face_index)) * 4;    const offset = try readU32(data, record);    const directory_offset: usize = @intCast(offset);    if (directory_offset > data.len or data.len - directory_offset < 12) return error.InvalidFont;    return directory_offset;}test "table lookup rejects empty directory" {    try std.testing.expectError(error.InvalidFont, table(&.{}, "head"));}

Source: lib/filigree/src/font/root.zig:4

zig
pub const directory = @import("directory.zig");

Audit

Definitions8
Public names8
Members0
Version26.7.0
Revisiondaab053ee433