Skip to documentation
SLOP

tiny.filigree.font.kern

Reference tiny.filigree font kern

Defined in font.

API (3)

Actions

Public operations.

Types and contracts

Public types and contracts.

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

Source

Called byCallsprivate sourcelib.filigree.src.font.faceinitDirectoryImplprivate sourcelib.filigree.src.font.kernvalidateKernFormat0font.kern.Kerninit
Static calls · unresolved targets: 1 · external targets: 0.

Source: lib/filigree/src/font/kern.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 readI16 = binary.readI16;const readU16 = binary.readU16;pub const Kern = struct {    subtable: ?KernSubtable,    pub fn init(data: []const u8, kern_table: Table) FontError!Kern {        if (kern_table.len < 4) return error.InvalidKern;        const version = try readU16(data, kern_table.offset);        if (version != 0) return error.InvalidKern;        const count = try readU16(data, kern_table.offset + 2);        var offset = kern_table.offset + 4;        const end = kern_table.offset + kern_table.len;        var first: ?KernSubtable = null;        for (0..count) |_| {            if (offset > end or end - offset < 6) return error.InvalidKern;            const subtable_start = offset;            const subtable_version = try readU16(data, offset);            const len: usize = try readU16(data, offset + 2);            const coverage = try readU16(data, offset + 4);            if (len < 6 or len > end - offset) return error.InvalidKern;            offset += len;            if (subtable_version != 0) continue;            const format: u8 = @intCast(coverage >> 8);            const horizontal = (coverage & 0x0001) != 0;            const minimum = (coverage & 0x0002) != 0;            const cross_stream = (coverage & 0x0004) != 0;            if (format != 0 or !horizontal or minimum or cross_stream) continue;            const subtable = try validateKernFormat0(data, .{ .offset = subtable_start, .len = len });            if (first == null) first = subtable;        }        return .{ .subtable = first };    }    pub fn value(self: Kern, data: []const u8, left_glyph: u32, right_glyph: u32) FontError!i16 {        if (self.subtable) |subtable| {            if (try subtable.value(data, left_glyph, right_glyph)) |pair_value| {                return pair_value;            }        }        return 0;    }};const KernSubtable = struct {    pairs_offset: usize,    pair_count: u16,    fn value(self: KernSubtable, data: []const u8, left_glyph: u32, right_glyph: u32) FontError!?i16 {        if (left_glyph > std.math.maxInt(u16) or right_glyph > std.math.maxInt(u16)) return null;        const key = (@as(u32, @intCast(left_glyph)) << 16) | @as(u32, @intCast(right_glyph));        var left: usize = 0;        var right: usize = self.pair_count;        while (left < right) {            const mid = left + (right - left) / 2;            const record = self.pairs_offset + mid * 6;            const candidate = (@as(u32, try readU16(data, record)) << 16) | @as(u32, try readU16(data, record + 2));            if (key < candidate) {                right = mid;            } else if (key > candidate) {                left = mid + 1;            } else {                return try readI16(data, record + 4);            }        }        return null;    }};fn validateKernFormat0(data: []const u8, subtable: Table) FontError!KernSubtable {    if (subtable.len < 14) return error.InvalidKern;    const pairs_offset = subtable.offset + 14;    const pair_count = try readU16(data, subtable.offset + 6);    const pairs_len = @as(usize, pair_count) * 6;    if (pairs_len > subtable.len - 14) return error.InvalidKern;    return .{        .pairs_offset = pairs_offset,        .pair_count = pair_count,    };}

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

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

Audit

Definitions4
Public names4
Members1
Version26.7.0
Revisiondaab053ee433