diff --git a/src/font/discovery.zig b/src/font/discovery.zig index aeaeb955e..67236d5c9 100644 --- a/src/font/discovery.zig +++ b/src/font/discovery.zig @@ -685,30 +685,29 @@ pub const CoreText = struct { break :style .unmatched; defer style.release(); + // Get our style string + var buf: [128]u8 = undefined; + const style_str = style.cstring(&buf, .utf8) orelse break :style .unmatched; + // If we have a specific desired style, attempt to search for that. if (desc.style) |desired_style| { - var buf: [128]u8 = undefined; - const style_str = style.cstring(&buf, .utf8) orelse break :style .unmatched; - // Matching style string gets highest score if (std.mem.eql(u8, desired_style, style_str)) break :style .match; - - // Otherwise the score is based on the length of the style string. - // Shorter styles are scored higher. - break :style @enumFromInt(100 -| style_str.len); + } else if (!desc.bold and !desc.italic) { + // If we do not, and we have no symbolic traits, then we try + // to find "regular" (or no style). If we have symbolic traits + // we do nothing but we can improve scoring by taking that into + // account, too. + if (std.mem.eql(u8, "Regular", style_str)) { + break :style .match; + } } - // If we do not, and we have no symbolic traits, then we try - // to find "regular" (or no style). If we have symbolic traits - // we do nothing but we can improve scoring by taking that into - // account, too. - if (!desc.bold and !desc.italic) { - var buf: [128]u8 = undefined; - const style_str = style.cstring(&buf, .utf8) orelse break :style .unmatched; - if (std.mem.eql(u8, "Regular", style_str)) break :style .match; - } - - break :style .unmatched; + // Otherwise the score is based on the length of the style string. + // Shorter styles are scored higher. This is a heuristic that + // if we don't have a desired style then shorter tends to be + // more often the "regular" style. + break :style @enumFromInt(100 -| style_str.len); }; score_acc.traits = traits: {