Skip patchsets and codepoints not in SymbolsNF

This commit is contained in:
Daniel Wennberg
2025-09-22 00:16:49 -07:00
committed by Mitchell Hashimoto
parent a1b7ea2e71
commit d07237fff5
2 changed files with 222 additions and 30 deletions

View File

@@ -9,17 +9,6 @@ const Constraint = @import("face.zig").RenderOptions.Constraint;
/// Get the constraints for the provided codepoint. /// Get the constraints for the provided codepoint.
pub fn getConstraint(cp: u21) ?Constraint { pub fn getConstraint(cp: u21) ?Constraint {
return switch (cp) { return switch (cp) {
0x2500...0x259f,
=> .{
.size = .stretch,
.max_constraint_width = 1,
.align_horizontal = .center1,
.align_vertical = .center1,
.pad_left = -0.02,
.pad_right = -0.02,
.pad_top = -0.01,
.pad_bottom = -0.01,
},
0x2630, 0x2630,
=> .{ => .{
.size = .cover, .size = .cover,
@@ -291,8 +280,6 @@ pub fn getConstraint(cp: u21) ?Constraint {
.align_vertical = .center1, .align_vertical = .center1,
}, },
0xe0cf, 0xe0cf,
0xe0d3,
0xe0d5,
=> .{ => .{
.size = .fit_cover1, .size = .fit_cover1,
.align_horizontal = .center1, .align_horizontal = .center1,
@@ -350,22 +337,31 @@ pub fn getConstraint(cp: u21) ?Constraint {
0x2665, 0x2665,
0x26a1, 0x26a1,
0x2b58, 0x2b58,
0xe000...0xe0a9, 0xe000...0xe00a,
0xe4fa...0xe7ef, 0xe0a0...0xe0a3,
0xe5fa...0xe6b8,
0xe700...0xe7ef,
0xea60, 0xea60,
0xea62...0xea7c, 0xea62...0xea7c,
0xea7e...0xea98, 0xea7e...0xea88,
0xea8a...0xea8c,
0xea8f...0xea98,
0xeaa3...0xeab3, 0xeaa3...0xeab3,
0xeab8...0xead3, 0xeab8...0xeac7,
0xead7...0xeb42, 0xeac9,
0xeb44...0xeb6d, 0xeacc...0xead3,
0xead7...0xeb09,
0xeb0b...0xeb42,
0xeb44...0xeb4e,
0xeb50...0xeb6d,
0xeb72...0xeb89, 0xeb72...0xeb89,
0xeb8b...0xeb99, 0xeb8b...0xeb99,
0xeb9b...0xebd4, 0xeb9b...0xebd4,
0xebd7...0xec06, 0xebd7...0xec06,
0xec08...0xec0a, 0xec08...0xec0a,
0xec0d...0xec1e, 0xec0d...0xec1e,
0xed00...0xf02f, 0xed00...0xefce,
0xf000...0xf02f,
0xf031...0xf03c, 0xf031...0xf03c,
0xf03f, 0xf03f,
0xf041...0xf043, 0xf041...0xf043,
@@ -384,10 +380,22 @@ pub fn getConstraint(cp: u21) ?Constraint {
0xf0cb...0xf0d5, 0xf0cb...0xf0d5,
0xf0d7...0xf0dd, 0xf0d7...0xf0dd,
0xf0df...0xf0e6, 0xf0df...0xf0e6,
0xf0e8...0xf295, 0xf0e8...0xf105,
0xf108...0xf12f,
0xf131...0xf140,
0xf142...0xf152,
0xf155,
0xf15a...0xf174,
0xf176,
0xf179...0xf181,
0xf183...0xf220,
0xf223,
0xf22e...0xf254,
0xf259,
0xf25c...0xf295,
0xf297...0xf2c4, 0xf297...0xf2c4,
0xf2c6...0xf2ef, 0xf2c6...0xf2ef,
0xf2f1...0xf847, 0xf2f1...0xf381,
0xf0001...0xf1af0, 0xf0001...0xf1af0,
=> .{ => .{
.size = .fit_cover1, .size = .fit_cover1,
@@ -672,6 +680,8 @@ pub fn getConstraint(cp: u21) ?Constraint {
0xf03e, 0xf03e,
0xf071, 0xf071,
0xf08c, 0xf08c,
0xf153...0xf154,
0xf158,
=> .{ => .{
.size = .fit_cover1, .size = .fit_cover1,
.height = .icon, .height = .icon,
@@ -828,6 +838,161 @@ pub fn getConstraint(cp: u21) ?Constraint {
.relative_height = 0.9998803756692248, .relative_height = 0.9998803756692248,
.relative_y = 0.0001196243307751, .relative_y = 0.0001196243307751,
}, },
0xf106...0xf107,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.5000000000000000,
.relative_y = 0.2853688029020556,
},
0xf130,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.9998602571268865,
},
0xf141,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.2593984962406015,
.relative_y = 0.3696741854636592,
},
0xf156,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.8752505446623093,
.relative_y = 0.0623155929038282,
},
0xf157,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.8756468797564688,
.relative_y = 0.0624338624338624,
},
0xf159,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.8756067947646895,
.relative_y = 0.0623492063492063,
},
0xf175,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.9989423585404548,
.relative_y = 0.0005288207297726,
},
0xf177...0xf178,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.6250661025912215,
.relative_y = 0.1877313590692755,
},
0xf182,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_width = 0.9998046921689268,
},
0xf221,
0xf224...0xf226,
0xf228,
0xf22a,
0xf22c,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.9994854643684076,
},
0xf222,
0xf227,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.8746819883943630,
.relative_y = 0.0624017379870223,
},
0xf229,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.9370837263813853,
.relative_y = 0.0624017379870223,
},
0xf22b,
0xf22d,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.6874767744332962,
.relative_y = 0.1560043449675557,
},
0xf255...0xf256,
0xf25a,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.9993997599039616,
},
0xf257,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.7810124049619848,
.relative_y = 0.0935945806894186,
},
0xf258,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.7498142113988452,
.relative_y = 0.1247927742525582,
},
0xf25b,
=> .{
.size = .fit_cover1,
.height = .icon,
.align_horizontal = .center1,
.align_vertical = .center1,
.relative_height = 0.9975006099019084,
},
0xf296, 0xf296,
=> .{ => .{
.size = .fit_cover1, .size = .fit_cover1,

View File

@@ -57,6 +57,7 @@ class PatchSetAttributeEntry(TypedDict):
class PatchSet(TypedDict): class PatchSet(TypedDict):
Name: str
SymStart: int SymStart: int
SymEnd: int SymEnd: int
SrcStart: int | None SrcStart: int | None
@@ -113,20 +114,43 @@ class PatchSetExtractor(ast.NodeVisitor):
if hasattr(ast, "unparse"): if hasattr(ast, "unparse"):
return eval( return eval(
ast.unparse(node), ast.unparse(node),
{"box_keep": True}, {"box_enabled": False, "box_keep": False},
{"self": SimpleNamespace(args=SimpleNamespace(careful=True))}, {
"self": SimpleNamespace(
args=SimpleNamespace(
careful=False,
custom=False,
fontawesome=True,
fontawesomeextension=True,
fontlogos=True,
octicons=True,
codicons=True,
powersymbols=True,
pomicons=True,
powerline=True,
powerlineextra=True,
material=True,
weather=True,
)
),
},
) )
msg = f"<cannot eval: {type(node).__name__}>" msg = f"<cannot eval: {type(node).__name__}>"
raise ValueError(msg) from None raise ValueError(msg) from None
def process_patch_entry(self, dict_node: ast.Dict) -> None: def process_patch_entry(self, dict_node: ast.Dict) -> None:
entry = {} entry = {}
disallowed_key_nodes = frozenset({"Enabled", "Name", "Filename", "Exact"}) disallowed_key_nodes = frozenset({"Filename", "Exact"})
for key_node, value_node in zip(dict_node.keys, dict_node.values): for key_node, value_node in zip(dict_node.keys, dict_node.values):
if ( if (
isinstance(key_node, ast.Constant) isinstance(key_node, ast.Constant)
and key_node.value not in disallowed_key_nodes and key_node.value not in disallowed_key_nodes
): ):
if key_node.value == "Enabled":
if self.safe_literal_eval(value_node):
continue # This patch set is enabled, continue to next key
else:
return # This patch set is disabled, skip
key = ast.literal_eval(cast("ast.Constant", key_node)) key = ast.literal_eval(cast("ast.Constant", key_node))
entry[key] = self.resolve_symbol(value_node) entry[key] = self.resolve_symbol(value_node)
self.patch_set_values.append(cast("PatchSet", entry)) self.patch_set_values.append(cast("PatchSet", entry))
@@ -275,12 +299,17 @@ def generate_zig_switch_arms(
entries: dict[int, PatchSetAttributeEntry] = {} entries: dict[int, PatchSetAttributeEntry] = {}
for entry in patch_sets: for entry in patch_sets:
print(f"Info: Extracting rules from patch set '{entry['Name']}'")
attributes = entry["Attributes"] attributes = entry["Attributes"]
for cp in range(entry["SymStart"], entry["SymEnd"] + 1): for cp in range(entry["SymStart"], entry["SymEnd"] + 1):
entries[cp] = attributes["default"].copy() if cp not in cmap:
print(f"Info: Skipping missing codepoint {hex(cp)}")
entries |= {k: v for k, v in attributes.items() if isinstance(k, int)} continue
if cp in attributes:
entries[cp] = attributes[cp].copy()
else:
entries[cp] = attributes["default"].copy()
if entry["ScaleRules"] is not None: if entry["ScaleRules"] is not None:
if "ScaleGroups" not in entry["ScaleRules"]: if "ScaleGroups" not in entry["ScaleRules"]:
@@ -335,8 +364,6 @@ def generate_zig_switch_arms(
this_bounds[0] - xMin this_bounds[0] - xMin
) / group_width ) / group_width
del entries[0]
# Group codepoints by attribute key # Group codepoints by attribute key
grouped = defaultdict[AttributeHash, list[int]](list) grouped = defaultdict[AttributeHash, list[int]](list)
for cp, attr in entries.items(): for cp, attr in entries.items():