maple-font/source/py/feature.py
subframe7536 0986e4aa50
Make release CI works (#291)
* fix ci

* commit updated woff2 var

* fix `--normal --no-liga`

* reduce logs

* split custom and release
2024-12-07 23:32:53 +08:00

65 lines
2.4 KiB
Python

def get_freeze_config_str(feature_freeze, enable_liga):
result = ""
for k, v in feature_freeze.items():
if v == "enable":
result += f"+{k};"
elif v == "disable":
result += f"-{k};"
if not enable_liga:
result += "-calt;"
return result
def freeze_feature(font, calt, moving_rules=[], config={}):
# check feature list
feature_record = font["GSUB"].table.FeatureList.FeatureRecord
feature_dict = {
feature.FeatureTag: feature.Feature
for feature in feature_record
if feature.FeatureTag != "calt"
}
if calt:
calt_features = [
feature.Feature for feature in feature_record if feature.FeatureTag == "calt"
]
else:
for feature in feature_record:
if feature.FeatureTag == "calt":
feature.Feature.LookupListIndex.clear()
feature.Feature.LookupCount = 0
feature.FeatureTag = "DELT"
# Process features
for tag, status in config.items():
target_feature = feature_dict.get(tag)
if not target_feature or status == "ignore":
continue
if status == "disable":
target_feature.LookupListIndex = []
continue
if tag in moving_rules and calt:
# Enable by moving rules into "calt"
for calt_feat in calt_features:
calt_feat.LookupListIndex.extend(target_feature.LookupListIndex)
else:
# Enable by replacing data in glyf and hmtx tables
glyph_dict = font["glyf"].glyphs
hmtx_dict = font["hmtx"].metrics
for index in target_feature.LookupListIndex:
lookup_subtable = font["GSUB"].table.LookupList.Lookup[index].SubTable[0]
if not lookup_subtable or "mapping" not in lookup_subtable.__dict__:
continue
for old_key, new_key in lookup_subtable.mapping.items():
if (
old_key in glyph_dict
and old_key in hmtx_dict
and new_key in glyph_dict
and new_key in hmtx_dict
):
glyph_dict[old_key] = glyph_dict[new_key]
hmtx_dict[old_key] = hmtx_dict[new_key]
else:
print(f"{old_key} or {new_key} does not exist")
return