Make metric-override able to override CAP, XH and SB. Fixes #632.

This commit is contained in:
be5invis 2020-07-14 22:28:22 -07:00
parent 1d88b38144
commit 9b2052a1ad
4 changed files with 32 additions and 32 deletions

View file

@ -70,30 +70,39 @@ function hiveBlend(hive, value) {
return generatedHive;
}
function numericConfigExists(x) {
return x != null && isFinite(x);
function numericFieldHandler(sink, key, x) {
if (x != null && isFinite(x)) sink[key] = x;
}
function subObjectHandler(sink, key, obj) {
sink[key] = {};
createMetricDataSet(sink[key], obj);
}
const metricOverrideHandlers = {
cap: numericFieldHandler,
xheight: numericFieldHandler,
sb: numericFieldHandler,
leading: numericFieldHandler,
winMetricAscenderPad: numericFieldHandler,
winMetricDescenderPad: numericFieldHandler,
powerlineScaleY: numericFieldHandler,
powerlineScaleX: numericFieldHandler,
powerlineShiftY: numericFieldHandler,
powerlineShiftX: numericFieldHandler,
multiplies: subObjectHandler,
adds: subObjectHandler
};
function createMetricDataSet(sink, mo) {
for (const key in mo) {
if (metricOverrideHandlers[key]) {
metricOverrideHandlers[key](sink, key, mo[key]);
} else {
console.error(`Metric override key ${key} is not supported. Skipping it.`);
}
}
}
function applyMetricOverride(para, mo) {
if (numericConfigExists(mo.leading)) {
para.leading = mo.leading;
}
if (numericConfigExists(mo.winMetricAscenderPad)) {
para.winMetricAscenderPad = mo.winMetricAscenderPad;
}
if (numericConfigExists(mo.winMetricDescenderPad)) {
para.winMetricDescenderPad = mo.winMetricDescenderPad;
}
if (numericConfigExists(mo.powerlineScaleY)) {
para.powerlineScaleY = mo.powerlineScaleY;
}
if (numericConfigExists(mo.powerlineScaleX)) {
para.powerlineScaleX = mo.powerlineScaleX;
}
if (numericConfigExists(mo.powerlineShiftY)) {
para.powerlineShiftY = mo.powerlineShiftY;
}
if (numericConfigExists(mo.powerlineShiftX)) {
para.powerlineShiftX = mo.powerlineShiftX;
}
const overrideObj = { metricOverride: {} };
createMetricDataSet(overrideObj.metricOverride, mo);
apply(para, overrideObj, ["metricOverride"]);
}
exports.applyMetricOverride = applyMetricOverride;