Make metric-override
able to override CAP, XH and SB. Fixes #632.
This commit is contained in:
parent
1d88b38144
commit
9b2052a1ad
4 changed files with 32 additions and 32 deletions
|
@ -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'
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue