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

@ -3,7 +3,6 @@ import '../support/point' as Point
import './kits/spiro-kit' as spirokit import './kits/spiro-kit' as spirokit
import './kits/boole-kit' as BooleKit import './kits/boole-kit' as BooleKit
import '../support/anchor' as Anchor import '../support/anchor' as Anchor
import '../support/monotonic-interpolate' as smoothreg
import [mix linreg clamp fallback] from '../support/utils' import [mix linreg clamp fallback] from '../support/utils'
import [calculateMetrics setFontMetrics MarksetDiv GenDivFrame] from '../meta/aesthetics' import [calculateMetrics setFontMetrics MarksetDiv GenDivFrame] from '../meta/aesthetics'

View file

@ -70,30 +70,39 @@ function hiveBlend(hive, value) {
return generatedHive; return generatedHive;
} }
function numericConfigExists(x) { function numericFieldHandler(sink, key, x) {
return x != null && isFinite(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) { function applyMetricOverride(para, mo) {
if (numericConfigExists(mo.leading)) { const overrideObj = { metricOverride: {} };
para.leading = mo.leading; createMetricDataSet(overrideObj.metricOverride, mo);
} apply(para, overrideObj, ["metricOverride"]);
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;
}
} }
exports.applyMetricOverride = applyMetricOverride; exports.applyMetricOverride = applyMetricOverride;

View file

@ -68,8 +68,6 @@ verbose = true
slab = true slab = true
onebalance = 10 onebalance = 10
overshootx = -16 overshootx = -16
[slab.multiplies]
sb = 1.1
###### Spacings ###### Spacings
# Terminal variant # Terminal variant

View file

@ -153,18 +153,12 @@ function validateAndShimBuildPlans(prefix, bp, dWeights, dSlopes, dWidths) {
} }
if (!bp.pre) bp.pre = {}; if (!bp.pre) bp.pre = {};
if (!bp.post) bp.post = {};
if (!bp.pre.design) bp.pre.design = bp.design || []; if (!bp.pre.design) bp.pre.design = bp.design || [];
if (!bp.pre.upright) bp.pre.upright = bp.upright || []; if (!bp.pre.upright) bp.pre.upright = bp.upright || [];
if (!bp.pre.oblique) bp.pre.oblique = bp.oblique || []; if (!bp.pre.oblique) bp.pre.oblique = bp.oblique || [];
if (!bp.pre.italic) bp.pre.italic = bp.italic || []; if (!bp.pre.italic) bp.pre.italic = bp.italic || [];
if (!bp.post.design) bp.post.design = [];
if (!bp.post.upright) bp.post.upright = [];
if (!bp.post.oblique) bp.post.oblique = [];
if (!bp.post.italic) bp.post.italic = [];
bp.weights = bp.weights || dWeights; bp.weights = bp.weights || dWeights;
bp.slopes = bp.slopes || bp.slants || dSlopes; bp.slopes = bp.slopes || bp.slants || dSlopes;
bp.widths = bp.widths || dWidths; bp.widths = bp.widths || dWidths;