From 755760a79ee31619035a3e8214d26adc274c4470 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 28 Aug 2022 10:24:07 -0700 Subject: [PATCH] pkg/harfbuzz: some functions and tests --- pkg/harfbuzz/build.zig | 2 +- pkg/harfbuzz/c.zig | 4 ++++ pkg/harfbuzz/main.zig | 7 +++++- pkg/harfbuzz/version.zig | 47 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 pkg/harfbuzz/c.zig create mode 100644 pkg/harfbuzz/version.zig diff --git a/pkg/harfbuzz/build.zig b/pkg/harfbuzz/build.zig index e110729b8..5b7d63e2c 100644 --- a/pkg/harfbuzz/build.zig +++ b/pkg/harfbuzz/build.zig @@ -2,7 +2,7 @@ const std = @import("std"); /// Directories with our includes. const root = thisDir() ++ "../../../vendor/harfbuzz/"; -const include_path = root ++ "include"; +const include_path = root ++ "src/"; pub const include_paths = .{include_path}; diff --git a/pkg/harfbuzz/c.zig b/pkg/harfbuzz/c.zig new file mode 100644 index 000000000..958e398ea --- /dev/null +++ b/pkg/harfbuzz/c.zig @@ -0,0 +1,4 @@ +pub usingnamespace @cImport({ + @cInclude("hb.h"); + @cInclude("hb-ft.h"); +}); diff --git a/pkg/harfbuzz/main.zig b/pkg/harfbuzz/main.zig index 1f40f6a44..777a4d571 100644 --- a/pkg/harfbuzz/main.zig +++ b/pkg/harfbuzz/main.zig @@ -1 +1,6 @@ -// Todo! +pub const c = @import("c.zig"); +pub usingnamespace @import("version.zig"); + +test { + @import("std").testing.refAllDecls(@This()); +} diff --git a/pkg/harfbuzz/version.zig b/pkg/harfbuzz/version.zig new file mode 100644 index 000000000..0773e22fd --- /dev/null +++ b/pkg/harfbuzz/version.zig @@ -0,0 +1,47 @@ +const std = @import("std"); +const c = @import("c.zig"); + +pub const Version = struct { + major: u32, + minor: u32, + micro: u32, +}; + +/// Returns library version as three integer components. +pub fn version() Version { + var major: c_uint = 0; + var minor: c_uint = 0; + var micro: c_uint = 0; + c.hb_version(&major, &minor, µ); + return .{ .major = major, .minor = minor, .micro = micro }; +} + +/// Tests the library version against a minimum value, as three integer components. +pub fn versionAtLeast(vsn: Version) bool { + return c.hb_version_atleast( + vsn.major, + vsn.minor, + vsn.micro, + ) > 0; +} + +/// Returns library version as a string with three components. +pub fn versionString() [:0]const u8 { + const res = c.hb_version_string(); + return std.mem.sliceTo(res, 0); +} + +test { + const testing = std.testing; + + // Should be able to get the version + const vsn = version(); + try testing.expect(vsn.major > 0); + + // Should be at least version 1 + try testing.expect(versionAtLeast(.{ + .major = 1, + .minor = 0, + .micro = 0, + })); +}