diff --git a/build.zig b/build.zig
index b1dde5c68..f847854dc 100644
--- a/build.zig
+++ b/build.zig
@@ -15,7 +15,6 @@ const XCFrameworkStep = @import("src/build/XCFrameworkStep.zig");
const Version = @import("src/build/Version.zig");
const glfw = @import("vendor/mach-glfw/build.zig");
-const fontconfig = @import("pkg/fontconfig/build.zig");
const js = @import("vendor/zig-js/build.zig");
const libxev = @import("vendor/libxev/build.zig");
const libxml2 = @import("vendor/zig-libxml2/libxml2.zig");
@@ -26,6 +25,7 @@ const utf8proc = @import("pkg/utf8proc/build.zig");
const tracylib = @import("pkg/tracy/build.zig");
const system_sdk = @import("vendor/mach-glfw/system_sdk.zig");
+const fontconfig = @import("pkg/fontconfig/build.old.zig");
const freetype = @import("pkg/freetype/build.old.zig");
const harfbuzz = @import("pkg/harfbuzz/build.old.zig");
const libpng = @import("pkg/libpng/build.old.zig");
@@ -785,48 +785,6 @@ fn addDeps(
step.linkLibrary(harfbuzz_dep.artifact("harfbuzz"));
try static_libs.append(harfbuzz_dep.artifact("harfbuzz").getEmittedBin());
- // const zlib_step = try zlib.link(b, step);
- // try static_libs.append(zlib_step.getEmittedBin());
- //
- // const libpng_step = try libpng.link(b, step, .{
- // .zlib = .{
- // .step = zlib_step,
- // .include = &zlib.include_paths,
- // },
- // });
- // try static_libs.append(libpng_step.getEmittedBin());
- //
- // // Freetype
- // const freetype_step = try freetype.link(b, step, .{
- // .libpng = freetype.Options.Libpng{
- // .enabled = true,
- // .step = libpng_step,
- // .include = &libpng.include_paths,
- // },
- //
- // .zlib = .{
- // .enabled = true,
- // .step = zlib_step,
- // .include = &zlib.include_paths,
- // },
- // });
- // try static_libs.append(freetype_step.getEmittedBin());
- //
- // // Harfbuzz
- // const harfbuzz_step = try harfbuzz.link(b, step, .{
- // .freetype = .{
- // .enabled = true,
- // .step = freetype_step,
- // .include = &freetype.include_paths,
- // },
- //
- // .coretext = .{
- // .enabled = font_backend.hasCoretext(),
- // },
- // });
- // system_sdk.include(b, harfbuzz_step, .{});
- // try static_libs.append(harfbuzz_step.getEmittedBin());
-
// Pixman
const pixman_step = try pixman.link(b, step, .{});
try static_libs.append(pixman_step.getEmittedBin());
diff --git a/pkg/fontconfig/build.old.zig b/pkg/fontconfig/build.old.zig
new file mode 100644
index 000000000..03b9573c0
--- /dev/null
+++ b/pkg/fontconfig/build.old.zig
@@ -0,0 +1,240 @@
+const std = @import("std");
+const builtin = @import("builtin");
+const NativeTargetInfo = std.zig.system.NativeTargetInfo;
+
+/// Directories with our includes.
+const root = thisDir() ++ "../../../vendor/fontconfig-2.14.0/";
+const include_path = root;
+const include_path_self = thisDir();
+
+pub const include_paths = .{ include_path, include_path_self };
+
+pub fn module(b: *std.Build) *std.build.Module {
+ return b.createModule(.{
+ .source_file = .{ .path = (comptime thisDir()) ++ "/main.zig" },
+ });
+}
+
+fn thisDir() []const u8 {
+ return std.fs.path.dirname(@src().file) orelse ".";
+}
+
+pub const Options = struct {
+ freetype: Freetype = .{},
+ expat: Expat = .{},
+ libxml2: bool = false,
+
+ pub const Freetype = struct {
+ enabled: bool = false,
+ step: ?*std.build.LibExeObjStep = null,
+ include: ?[]const []const u8 = null,
+ };
+
+ pub const Expat = struct {
+ enabled: bool = false,
+ step: ?*std.build.LibExeObjStep = null,
+ include: ?[]const []const u8 = null,
+ };
+};
+
+pub fn link(
+ b: *std.Build,
+ step: *std.build.LibExeObjStep,
+ opt: Options,
+) !*std.build.LibExeObjStep {
+ const lib = try buildFontconfig(b, step, opt);
+ step.linkLibrary(lib);
+ step.addIncludePath(.{ .path = include_path });
+ step.addIncludePath(.{ .path = include_path_self });
+ return lib;
+}
+
+pub fn buildFontconfig(
+ b: *std.Build,
+ step: *std.build.LibExeObjStep,
+ opt: Options,
+) !*std.build.LibExeObjStep {
+ const target = step.target;
+ const lib = b.addStaticLibrary(.{
+ .name = "fontconfig",
+ .target = step.target,
+ .optimize = step.optimize,
+ });
+
+ // Include
+ lib.addIncludePath(.{ .path = include_path });
+ lib.addIncludePath(.{ .path = include_path_self });
+
+ // Link
+ lib.linkLibC();
+ if (opt.expat.enabled) {
+ if (opt.expat.step) |expat|
+ lib.linkLibrary(expat)
+ else
+ lib.linkSystemLibrary("expat");
+
+ if (opt.expat.include) |dirs|
+ for (dirs) |dir| lib.addIncludePath(.{ .path = dir });
+ }
+ if (opt.freetype.enabled) {
+ if (opt.freetype.step) |freetype|
+ lib.linkLibrary(freetype)
+ else
+ lib.linkSystemLibrary("freetype2");
+
+ if (opt.freetype.include) |dirs|
+ for (dirs) |dir| lib.addIncludePath(.{ .path = dir });
+ }
+ if (!target.isWindows()) {
+ lib.linkSystemLibrary("pthread");
+ }
+
+ // Compile
+ var flags = std.ArrayList([]const u8).init(b.allocator);
+ defer flags.deinit();
+
+ try flags.appendSlice(&.{
+ "-DHAVE_DIRENT_H",
+ "-DHAVE_FCNTL_H",
+ "-DHAVE_STDLIB_H",
+ "-DHAVE_STRING_H",
+ "-DHAVE_UNISTD_H",
+ "-DHAVE_SYS_PARAM_H",
+
+ "-DHAVE_MKSTEMP",
+ "-DHAVE__MKTEMP_S",
+ "-DHAVE_MKDTEMP",
+ "-DHAVE_GETOPT",
+ "-DHAVE_GETOPT_LONG",
+ //"-DHAVE_GETPROGNAME",
+ //"-DHAVE_GETEXECNAME",
+ "-DHAVE_RAND",
+ //"-DHAVE_RANDOM_R",
+ "-DHAVE_FSTATVFS",
+ "-DHAVE_FSTATFS",
+ "-DHAVE_VPRINTF",
+
+ "-DHAVE_FT_GET_BDF_PROPERTY",
+ "-DHAVE_FT_GET_PS_FONT_INFO",
+ "-DHAVE_FT_HAS_PS_GLYPH_NAMES",
+ "-DHAVE_FT_GET_X11_FONT_FORMAT",
+ "-DHAVE_FT_DONE_MM_VAR",
+
+ "-DHAVE_POSIX_FADVISE",
+
+ //"-DHAVE_STRUCT_STATVFS_F_BASETYPE",
+ // "-DHAVE_STRUCT_STATVFS_F_FSTYPENAME",
+ // "-DHAVE_STRUCT_STATFS_F_FLAGS",
+ // "-DHAVE_STRUCT_STATFS_F_FSTYPENAME",
+ // "-DHAVE_STRUCT_DIRENT_D_TYPE",
+
+ "-DFLEXIBLE_ARRAY_MEMBER",
+
+ "-DHAVE_STDATOMIC_PRIMITIVES",
+
+ "-DFC_GPERF_SIZE_T=size_t",
+
+ // Default errors that fontconfig can't handle
+ "-Wno-implicit-function-declaration",
+ "-Wno-int-conversion",
+
+ // https://gitlab.freedesktop.org/fontconfig/fontconfig/-/merge_requests/231
+ "-fno-sanitize=undefined",
+ "-fno-sanitize-trap=undefined",
+ });
+ const target_info = try NativeTargetInfo.detect(target);
+ switch (target_info.target.ptrBitWidth()) {
+ 32 => try flags.appendSlice(&.{
+ "-DSIZEOF_VOID_P=4",
+ "-DALIGNOF_VOID_P=4",
+ }),
+
+ 64 => try flags.appendSlice(&.{
+ "-DSIZEOF_VOID_P=8",
+ "-DALIGNOF_VOID_P=8",
+ }),
+
+ else => @panic("unsupported arch"),
+ }
+
+ if (opt.libxml2) {
+ try flags.appendSlice(&.{
+ "-DENABLE_LIBXML2",
+ "-DLIBXML_STATIC",
+ "-DLIBXML_PUSH_ENABLED",
+ });
+ if (target.isWindows()) {
+ // NOTE: this should be defined on all targets
+ try flags.appendSlice(&.{
+ "-Werror=implicit-function-declaration",
+ });
+ }
+ }
+
+ if (target.isWindows()) {
+ try flags.appendSlice(&.{
+ "-DFC_CACHEDIR=\"LOCAL_APPDATA_FONTCONFIG_CACHE\"",
+ "-DFC_TEMPLATEDIR=\"c:/share/fontconfig/conf.avail\"",
+ "-DCONFIGDIR=\"c:/etc/fonts/conf.d\"",
+ "-DFC_DEFAULT_FONTS=\"\\t
WINDOWSFONTDIR\\n\\tWINDOWSUSERFONTDIR\\n\"",
+ });
+ } else {
+ try flags.appendSlice(&.{
+ "-DHAVE_SYS_STATVFS_H",
+ "-DHAVE_SYS_VFS_H",
+ "-DHAVE_SYS_STATFS_H",
+ "-DHAVE_SYS_MOUNT_H",
+ "-DHAVE_LINK",
+ "-DHAVE_MKOSTEMP",
+ "-DHAVE_RANDOM",
+ "-DHAVE_LRAND48",
+ "-DHAVE_RAND_R",
+ "-DHAVE_READLINK",
+ "-DHAVE_LSTAT",
+ "-DHAVE_MMAP",
+ "-DHAVE_PTHREAD",
+
+ "-DFC_CACHEDIR=\"/var/cache/fontconfig\"",
+ "-DFC_TEMPLATEDIR=\"/usr/share/fontconfig/conf.avail\"",
+ "-DFONTCONFIG_PATH=\"/etc/fonts\"",
+ "-DCONFIGDIR=\"/usr/local/fontconfig/conf.d\"",
+ "-DFC_DEFAULT_FONTS=\"/usr/share/fonts/usr/local/share/fonts\"",
+ });
+ }
+
+ // C files
+ lib.addCSourceFiles(srcs, flags.items);
+
+ return lib;
+}
+
+const srcs = &.{
+ root ++ "src/fcatomic.c",
+ root ++ "src/fccache.c",
+ root ++ "src/fccfg.c",
+ root ++ "src/fccharset.c",
+ root ++ "src/fccompat.c",
+ root ++ "src/fcdbg.c",
+ root ++ "src/fcdefault.c",
+ root ++ "src/fcdir.c",
+ root ++ "src/fcformat.c",
+ root ++ "src/fcfreetype.c",
+ root ++ "src/fcfs.c",
+ root ++ "src/fcptrlist.c",
+ root ++ "src/fchash.c",
+ root ++ "src/fcinit.c",
+ root ++ "src/fclang.c",
+ root ++ "src/fclist.c",
+ root ++ "src/fcmatch.c",
+ root ++ "src/fcmatrix.c",
+ root ++ "src/fcname.c",
+ root ++ "src/fcobjs.c",
+ root ++ "src/fcpat.c",
+ root ++ "src/fcrange.c",
+ root ++ "src/fcserialize.c",
+ root ++ "src/fcstat.c",
+ root ++ "src/fcstr.c",
+ root ++ "src/fcweight.c",
+ root ++ "src/fcxml.c",
+ root ++ "src/ftglue.c",
+};
diff --git a/pkg/fontconfig/build.zig b/pkg/fontconfig/build.zig
index 03b9573c0..352b48758 100644
--- a/pkg/fontconfig/build.zig
+++ b/pkg/fontconfig/build.zig
@@ -1,107 +1,51 @@
const std = @import("std");
-const builtin = @import("builtin");
const NativeTargetInfo = std.zig.system.NativeTargetInfo;
-/// Directories with our includes.
-const root = thisDir() ++ "../../../vendor/fontconfig-2.14.0/";
-const include_path = root;
-const include_path_self = thisDir();
+pub fn build(b: *std.Build) !void {
+ const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
-pub const include_paths = .{ include_path, include_path_self };
+ const libxml2_enabled = b.option(bool, "enable-libxml2", "Build libxml2") orelse true;
+ const freetype_enabled = b.option(bool, "enable-freetype", "Build freetype") orelse true;
-pub fn module(b: *std.Build) *std.build.Module {
- return b.createModule(.{
- .source_file = .{ .path = (comptime thisDir()) ++ "/main.zig" },
- });
-}
+ const upstream = b.dependency("fontconfig", .{});
-fn thisDir() []const u8 {
- return std.fs.path.dirname(@src().file) orelse ".";
-}
-
-pub const Options = struct {
- freetype: Freetype = .{},
- expat: Expat = .{},
- libxml2: bool = false,
-
- pub const Freetype = struct {
- enabled: bool = false,
- step: ?*std.build.LibExeObjStep = null,
- include: ?[]const []const u8 = null,
- };
-
- pub const Expat = struct {
- enabled: bool = false,
- step: ?*std.build.LibExeObjStep = null,
- include: ?[]const []const u8 = null,
- };
-};
-
-pub fn link(
- b: *std.Build,
- step: *std.build.LibExeObjStep,
- opt: Options,
-) !*std.build.LibExeObjStep {
- const lib = try buildFontconfig(b, step, opt);
- step.linkLibrary(lib);
- step.addIncludePath(.{ .path = include_path });
- step.addIncludePath(.{ .path = include_path_self });
- return lib;
-}
-
-pub fn buildFontconfig(
- b: *std.Build,
- step: *std.build.LibExeObjStep,
- opt: Options,
-) !*std.build.LibExeObjStep {
- const target = step.target;
const lib = b.addStaticLibrary(.{
.name = "fontconfig",
- .target = step.target,
- .optimize = step.optimize,
+ .target = target,
+ .optimize = optimize,
});
-
- // Include
- lib.addIncludePath(.{ .path = include_path });
- lib.addIncludePath(.{ .path = include_path_self });
-
- // Link
lib.linkLibC();
- if (opt.expat.enabled) {
- if (opt.expat.step) |expat|
- lib.linkLibrary(expat)
- else
- lib.linkSystemLibrary("expat");
-
- if (opt.expat.include) |dirs|
- for (dirs) |dir| lib.addIncludePath(.{ .path = dir });
- }
- if (opt.freetype.enabled) {
- if (opt.freetype.step) |freetype|
- lib.linkLibrary(freetype)
- else
- lib.linkSystemLibrary("freetype2");
-
- if (opt.freetype.include) |dirs|
- for (dirs) |dir| lib.addIncludePath(.{ .path = dir });
- }
if (!target.isWindows()) {
lib.linkSystemLibrary("pthread");
}
+ if (freetype_enabled) {
+ const freetype_dep = b.dependency("freetype", .{ .target = target, .optimize = optimize });
+ lib.linkLibrary(freetype_dep.artifact("freetype"));
+ }
+ if (libxml2_enabled) {
+ // const libxml2_dep = b.dependency("libxml2", .{ .target = target, .optimize = optimize });
+ // lib.linkLibrary(libxml2_dep.artifact("xml2"));
+ }
+
+ lib.addIncludePath(upstream.path(""));
+ lib.addIncludePath(.{ .path = "override/include" });
- // Compile
var flags = std.ArrayList([]const u8).init(b.allocator);
defer flags.deinit();
-
try flags.appendSlice(&.{
"-DHAVE_DIRENT_H",
"-DHAVE_FCNTL_H",
"-DHAVE_STDLIB_H",
"-DHAVE_STRING_H",
"-DHAVE_UNISTD_H",
+ "-DHAVE_SYS_STATVFS_H",
"-DHAVE_SYS_PARAM_H",
+ "-DHAVE_SYS_MOUNT_H",
+ "-DHAVE_LINK",
"-DHAVE_MKSTEMP",
+ "-DHAVE_MKOSTEMP",
"-DHAVE__MKTEMP_S",
"-DHAVE_MKDTEMP",
"-DHAVE_GETOPT",
@@ -109,9 +53,15 @@ pub fn buildFontconfig(
//"-DHAVE_GETPROGNAME",
//"-DHAVE_GETEXECNAME",
"-DHAVE_RAND",
+ "-DHAVE_RANDOM",
+ "-DHAVE_LRAND48",
//"-DHAVE_RANDOM_R",
+ "-DHAVE_RAND_R",
+ "-DHAVE_READLINK",
"-DHAVE_FSTATVFS",
"-DHAVE_FSTATFS",
+ "-DHAVE_LSTAT",
+ "-DHAVE_MMAP",
"-DHAVE_VPRINTF",
"-DHAVE_FT_GET_BDF_PROPERTY",
@@ -156,21 +106,6 @@ pub fn buildFontconfig(
else => @panic("unsupported arch"),
}
-
- if (opt.libxml2) {
- try flags.appendSlice(&.{
- "-DENABLE_LIBXML2",
- "-DLIBXML_STATIC",
- "-DLIBXML_PUSH_ENABLED",
- });
- if (target.isWindows()) {
- // NOTE: this should be defined on all targets
- try flags.appendSlice(&.{
- "-Werror=implicit-function-declaration",
- });
- }
- }
-
if (target.isWindows()) {
try flags.appendSlice(&.{
"-DFC_CACHEDIR=\"LOCAL_APPDATA_FONTCONFIG_CACHE\"",
@@ -181,8 +116,6 @@ pub fn buildFontconfig(
} else {
try flags.appendSlice(&.{
"-DHAVE_SYS_STATVFS_H",
- "-DHAVE_SYS_VFS_H",
- "-DHAVE_SYS_STATFS_H",
"-DHAVE_SYS_MOUNT_H",
"-DHAVE_LINK",
"-DHAVE_MKOSTEMP",
@@ -200,41 +133,77 @@ pub fn buildFontconfig(
"-DCONFIGDIR=\"/usr/local/fontconfig/conf.d\"",
"-DFC_DEFAULT_FONTS=\"/usr/share/fonts/usr/local/share/fonts\"",
});
+ if (target.isLinux()) {
+ try flags.appendSlice(&.{
+ "-DHAVE_SYS_STATFS_H",
+ "-DHAVE_SYS_VFS_H",
+ });
+ }
+ }
+ if (libxml2_enabled) {
+ try flags.appendSlice(&.{
+ "-DENABLE_LIBXML2",
+ "-DLIBXML_STATIC",
+ "-DLIBXML_PUSH_ENABLED",
+ });
+ if (target.isWindows()) {
+ // NOTE: this should be defined on all targets
+ try flags.appendSlice(&.{
+ "-Werror=implicit-function-declaration",
+ });
+ }
}
- // C files
- lib.addCSourceFiles(srcs, flags.items);
+ for (srcs) |src| {
+ lib.addCSourceFile(.{
+ .file = upstream.path(src),
+ .flags = flags.items,
+ });
+ }
- return lib;
+ lib.installHeadersDirectoryOptions(.{
+ .source_dir = upstream.path("fontconfig"),
+ .install_dir = .header,
+ .install_subdir = "",
+ .include_extensions = &.{".h"},
+ });
+
+ b.installArtifact(lib);
}
-const srcs = &.{
- root ++ "src/fcatomic.c",
- root ++ "src/fccache.c",
- root ++ "src/fccfg.c",
- root ++ "src/fccharset.c",
- root ++ "src/fccompat.c",
- root ++ "src/fcdbg.c",
- root ++ "src/fcdefault.c",
- root ++ "src/fcdir.c",
- root ++ "src/fcformat.c",
- root ++ "src/fcfreetype.c",
- root ++ "src/fcfs.c",
- root ++ "src/fcptrlist.c",
- root ++ "src/fchash.c",
- root ++ "src/fcinit.c",
- root ++ "src/fclang.c",
- root ++ "src/fclist.c",
- root ++ "src/fcmatch.c",
- root ++ "src/fcmatrix.c",
- root ++ "src/fcname.c",
- root ++ "src/fcobjs.c",
- root ++ "src/fcpat.c",
- root ++ "src/fcrange.c",
- root ++ "src/fcserialize.c",
- root ++ "src/fcstat.c",
- root ++ "src/fcstr.c",
- root ++ "src/fcweight.c",
- root ++ "src/fcxml.c",
- root ++ "src/ftglue.c",
+const headers = &.{
+ "fontconfig/fontconfig.h",
+ "fontconfig/fcprivate.h",
+ "fontconfig/fcfreetype.h",
+};
+
+const srcs: []const []const u8 = &.{
+ "src/fcatomic.c",
+ "src/fccache.c",
+ "src/fccfg.c",
+ "src/fccharset.c",
+ "src/fccompat.c",
+ "src/fcdbg.c",
+ "src/fcdefault.c",
+ "src/fcdir.c",
+ "src/fcformat.c",
+ "src/fcfreetype.c",
+ "src/fcfs.c",
+ "src/fcptrlist.c",
+ "src/fchash.c",
+ "src/fcinit.c",
+ "src/fclang.c",
+ "src/fclist.c",
+ "src/fcmatch.c",
+ "src/fcmatrix.c",
+ "src/fcname.c",
+ "src/fcobjs.c",
+ "src/fcpat.c",
+ "src/fcrange.c",
+ "src/fcserialize.c",
+ "src/fcstat.c",
+ "src/fcstr.c",
+ "src/fcweight.c",
+ "src/fcxml.c",
+ "src/ftglue.c",
};
diff --git a/pkg/fontconfig/build.zig.zon b/pkg/fontconfig/build.zig.zon
new file mode 100644
index 000000000..8a342f66f
--- /dev/null
+++ b/pkg/fontconfig/build.zig.zon
@@ -0,0 +1,12 @@
+.{
+ .name = "fontconfig",
+ .version = "2.14.2",
+ .dependencies = .{
+ .fontconfig = .{
+ .url = "https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.14.2.tar.gz",
+ .hash = "12201149afb3326c56c05bb0a577f54f76ac20deece63aa2f5cd6ff31a4fa4fcb3b7",
+ },
+
+ .freetype = .{ .path = "../freetype" },
+ },
+}
diff --git a/pkg/fontconfig/override/include/fcalias.h b/pkg/fontconfig/override/include/fcalias.h
new file mode 100644
index 000000000..e69de29bb
diff --git a/pkg/fontconfig/override/include/fcaliastail.h b/pkg/fontconfig/override/include/fcaliastail.h
new file mode 100644
index 000000000..e69de29bb
diff --git a/pkg/fontconfig/override/include/fcftalias.h b/pkg/fontconfig/override/include/fcftalias.h
new file mode 100644
index 000000000..e69de29bb
diff --git a/pkg/fontconfig/override/include/fcftaliastail.h b/pkg/fontconfig/override/include/fcftaliastail.h
new file mode 100644
index 000000000..e69de29bb
diff --git a/pkg/fontconfig/override/include/fcobjshash.h b/pkg/fontconfig/override/include/fcobjshash.h
new file mode 100644
index 000000000..f06234ac3
--- /dev/null
+++ b/pkg/fontconfig/override/include/fcobjshash.h
@@ -0,0 +1,347 @@
+/* ANSI-C code produced by gperf version 3.1 */
+/* Command-line: gperf --pic -m 100 fcobjshash.gperf */
+/* Computed positions: -k'3,5' */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646. */
+#error "gperf generated tables don't work with this execution character set. Please report a bug to ."
+#endif
+
+#line 1 "fcobjshash.gperf"
+
+#line 13 "fcobjshash.gperf"
+struct FcObjectTypeInfo {
+int name;
+int id;
+};
+#include
+/* maximum key range = 59, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+FcObjectTypeHash (register const char *str, register size_t len)
+{
+ static const unsigned char asso_values[] =
+ {
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 4, 10, 32,
+ 21, 29, 28, 49, 14, 4, 66, 66, 5, 31,
+ 18, 22, 27, 66, 15, 9, 8, 23, 23, 13,
+ 23, 16, 4, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66
+ };
+ register unsigned int hval = len;
+
+ switch (hval)
+ {
+ default:
+ hval += asso_values[(unsigned char)str[4]];
+ /*FALLTHROUGH*/
+ case 4:
+ case 3:
+ hval += asso_values[(unsigned char)str[2]];
+ break;
+ }
+ return hval;
+}
+
+struct FcObjectTypeNamePool_t
+ {
+ char FcObjectTypeNamePool_str7[sizeof("dpi")];
+ char FcObjectTypeNamePool_str8[sizeof("size")];
+ char FcObjectTypeNamePool_str9[sizeof("file")];
+ char FcObjectTypeNamePool_str13[sizeof("hash")];
+ char FcObjectTypeNamePool_str14[sizeof("rgba")];
+ char FcObjectTypeNamePool_str15[sizeof("spacing")];
+ char FcObjectTypeNamePool_str16[sizeof("scalable")];
+ char FcObjectTypeNamePool_str17[sizeof("slant")];
+ char FcObjectTypeNamePool_str18[sizeof("matrix")];
+ char FcObjectTypeNamePool_str19[sizeof("outline")];
+ char FcObjectTypeNamePool_str20[sizeof("charset")];
+ char FcObjectTypeNamePool_str21[sizeof("antialias")];
+ char FcObjectTypeNamePool_str22[sizeof("lang")];
+ char FcObjectTypeNamePool_str23[sizeof("embolden")];
+ char FcObjectTypeNamePool_str24[sizeof("weight")];
+ char FcObjectTypeNamePool_str25[sizeof("color")];
+ char FcObjectTypeNamePool_str26[sizeof("charwidth")];
+ char FcObjectTypeNamePool_str27[sizeof("variable")];
+ char FcObjectTypeNamePool_str28[sizeof("charheight")];
+ char FcObjectTypeNamePool_str29[sizeof("hinting")];
+ char FcObjectTypeNamePool_str30[sizeof("autohint")];
+ char FcObjectTypeNamePool_str31[sizeof("fullname")];
+ char FcObjectTypeNamePool_str32[sizeof("postscriptname")];
+ char FcObjectTypeNamePool_str33[sizeof("verticallayout")];
+ char FcObjectTypeNamePool_str34[sizeof("lcdfilter")];
+ char FcObjectTypeNamePool_str35[sizeof("fullnamelang")];
+ char FcObjectTypeNamePool_str36[sizeof("hintstyle")];
+ char FcObjectTypeNamePool_str37[sizeof("pixelsize")];
+ char FcObjectTypeNamePool_str38[sizeof("scale")];
+ char FcObjectTypeNamePool_str39[sizeof("globaladvance")];
+ char FcObjectTypeNamePool_str40[sizeof("width")];
+ char FcObjectTypeNamePool_str41[sizeof("order")];
+ char FcObjectTypeNamePool_str42[sizeof("family")];
+ char FcObjectTypeNamePool_str43[sizeof("fonthashint")];
+ char FcObjectTypeNamePool_str44[sizeof("namelang")];
+ char FcObjectTypeNamePool_str45[sizeof("embeddedbitmap")];
+ char FcObjectTypeNamePool_str46[sizeof("familylang")];
+ char FcObjectTypeNamePool_str47[sizeof("capability")];
+ char FcObjectTypeNamePool_str48[sizeof("rasterizer")];
+ char FcObjectTypeNamePool_str49[sizeof("index")];
+ char FcObjectTypeNamePool_str50[sizeof("style")];
+ char FcObjectTypeNamePool_str51[sizeof("foundry")];
+ char FcObjectTypeNamePool_str52[sizeof("fontversion")];
+ char FcObjectTypeNamePool_str53[sizeof("minspace")];
+ char FcObjectTypeNamePool_str54[sizeof("stylelang")];
+ char FcObjectTypeNamePool_str55[sizeof("fontvariations")];
+ char FcObjectTypeNamePool_str56[sizeof("fontformat")];
+ char FcObjectTypeNamePool_str57[sizeof("decorative")];
+ char FcObjectTypeNamePool_str58[sizeof("fontfeatures")];
+ char FcObjectTypeNamePool_str59[sizeof("symbol")];
+ char FcObjectTypeNamePool_str60[sizeof("prgname")];
+ char FcObjectTypeNamePool_str65[sizeof("aspect")];
+ };
+static const struct FcObjectTypeNamePool_t FcObjectTypeNamePool_contents =
+ {
+ "dpi",
+ "size",
+ "file",
+ "hash",
+ "rgba",
+ "spacing",
+ "scalable",
+ "slant",
+ "matrix",
+ "outline",
+ "charset",
+ "antialias",
+ "lang",
+ "embolden",
+ "weight",
+ "color",
+ "charwidth",
+ "variable",
+ "charheight",
+ "hinting",
+ "autohint",
+ "fullname",
+ "postscriptname",
+ "verticallayout",
+ "lcdfilter",
+ "fullnamelang",
+ "hintstyle",
+ "pixelsize",
+ "scale",
+ "globaladvance",
+ "width",
+ "order",
+ "family",
+ "fonthashint",
+ "namelang",
+ "embeddedbitmap",
+ "familylang",
+ "capability",
+ "rasterizer",
+ "index",
+ "style",
+ "foundry",
+ "fontversion",
+ "minspace",
+ "stylelang",
+ "fontvariations",
+ "fontformat",
+ "decorative",
+ "fontfeatures",
+ "symbol",
+ "prgname",
+ "aspect"
+ };
+#define FcObjectTypeNamePool ((const char *) &FcObjectTypeNamePool_contents)
+const struct FcObjectTypeInfo *
+FcObjectTypeLookup (register const char *str, register size_t len)
+{
+ enum
+ {
+ TOTAL_KEYWORDS = 52,
+ MIN_WORD_LENGTH = 3,
+ MAX_WORD_LENGTH = 14,
+ MIN_HASH_VALUE = 7,
+ MAX_HASH_VALUE = 65
+ };
+
+ static const struct FcObjectTypeInfo wordlist[] =
+ {
+ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+#line 43 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str7,FC_DPI_OBJECT},
+#line 27 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str8,FC_SIZE_OBJECT},
+#line 38 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str9,FC_FILE_OBJECT},
+ {-1}, {-1}, {-1},
+#line 62 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str13,FC_HASH_OBJECT},
+#line 44 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str14,FC_RGBA_OBJECT},
+#line 30 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str15,FC_SPACING_OBJECT},
+#line 42 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str16,FC_SCALABLE_OBJECT},
+#line 24 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str17,FC_SLANT_OBJECT},
+#line 49 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str18,FC_MATRIX_OBJECT},
+#line 41 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str19,FC_OUTLINE_OBJECT},
+#line 50 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str20,FC_CHARSET_OBJECT},
+#line 32 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str21,FC_ANTIALIAS_OBJECT},
+#line 51 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str22,FC_LANG_OBJECT},
+#line 55 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str23,FC_EMBOLDEN_OBJECT},
+#line 25 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str24,FC_WEIGHT_OBJECT},
+#line 64 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str25,FC_COLOR_OBJECT},
+#line 47 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str26,FC_CHARWIDTH_OBJECT},
+#line 67 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str27,FC_VARIABLE_OBJECT},
+#line 48 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str28,FC_CHAR_HEIGHT_OBJECT},
+#line 34 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str29,FC_HINTING_OBJECT},
+#line 36 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str30,FC_AUTOHINT_OBJECT},
+#line 22 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str31,FC_FULLNAME_OBJECT},
+#line 63 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str32,FC_POSTSCRIPT_NAME_OBJECT},
+#line 35 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str33,FC_VERTICAL_LAYOUT_OBJECT},
+#line 58 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str34,FC_LCD_FILTER_OBJECT},
+#line 23 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str35,FC_FULLNAMELANG_OBJECT},
+#line 33 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str36,FC_HINT_STYLE_OBJECT},
+#line 29 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str37,FC_PIXEL_SIZE_OBJECT},
+#line 45 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str38,FC_SCALE_OBJECT},
+#line 37 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str39,FC_GLOBAL_ADVANCE_OBJECT},
+#line 26 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str40,FC_WIDTH_OBJECT},
+#line 69 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str41,FC_ORDER_OBJECT},
+#line 18 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str42,FC_FAMILY_OBJECT},
+#line 68 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str43,FC_FONT_HAS_HINT_OBJECT},
+#line 59 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str44,FC_NAMELANG_OBJECT},
+#line 56 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str45,FC_EMBEDDED_BITMAP_OBJECT},
+#line 19 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str46,FC_FAMILYLANG_OBJECT},
+#line 53 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str47,FC_CAPABILITY_OBJECT},
+#line 40 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str48,FC_RASTERIZER_OBJECT},
+#line 39 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str49,FC_INDEX_OBJECT},
+#line 20 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str50,FC_STYLE_OBJECT},
+#line 31 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str51,FC_FOUNDRY_OBJECT},
+#line 52 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str52,FC_FONTVERSION_OBJECT},
+#line 46 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str53,FC_MINSPACE_OBJECT},
+#line 21 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str54,FC_STYLELANG_OBJECT},
+#line 66 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str55,FC_FONT_VARIATIONS_OBJECT},
+#line 54 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str56,FC_FONTFORMAT_OBJECT},
+#line 57 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str57,FC_DECORATIVE_OBJECT},
+#line 60 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str58,FC_FONT_FEATURES_OBJECT},
+#line 65 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str59,FC_SYMBOL_OBJECT},
+#line 61 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str60,FC_PRGNAME_OBJECT},
+ {-1}, {-1}, {-1}, {-1},
+#line 28 "fcobjshash.gperf"
+ {(int)(size_t)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str65,FC_ASPECT_OBJECT}
+ };
+
+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+ {
+ register unsigned int key = FcObjectTypeHash (str, len);
+
+ if (key <= MAX_HASH_VALUE)
+ {
+ register int o = wordlist[key].name;
+ if (o >= 0)
+ {
+ register const char *s = o + FcObjectTypeNamePool;
+
+ if (*str == *s && !strcmp (str + 1, s + 1))
+ return &wordlist[key];
+ }
+ }
+ }
+ return 0;
+}