* Make user build plans' variants inheritable (#1345).

This commit is contained in:
be5invis 2022-05-21 13:55:12 -07:00
parent 401c8d7863
commit 5f6cf31818
4 changed files with 25 additions and 4 deletions

View file

@ -1 +1,2 @@
* Make user build plans' variants inheritable (#1345).
* Add top-cut variants of `1` (#1354). * Add top-cut variants of `1` (#1354).

View file

@ -182,6 +182,7 @@ Subsection `variants` is used to configure character variants in the font. Prope
- `ss17`: Set character variant to “Recursive Mono Style”. - `ss17`: Set character variant to “Recursive Mono Style”.
- `ss18`: Set character variant to “Input Mono Style”. - `ss18`: Set character variant to “Input Mono Style”.
- `ss20`: Set character variant to “Curly Style”. - `ss20`: Set character variant to “Curly Style”.
- Other build plans variant information, by using `buildPlans.<name>`. For example, `inherits = "buildPlans.iosevka-exp"` will inherit from build plan “`iosevka-exp`s variant configuration.
<!-- END Section-Stylistic-Sets --> <!-- END Section-Stylistic-Sets -->

View file

@ -2,7 +2,7 @@
exports.apply = applyVariantData; exports.apply = applyVariantData;
function applyVariantData(data, para, argv) { function applyVariantData(data, para, argv) {
const parsed = parseVariantsData(data); const parsed = parseVariantsData(data, argv);
let tagSet = new Set(); let tagSet = new Set();
for (const prime of parsed.primes.values()) { for (const prime of parsed.primes.values()) {
if (!prime.tag) continue; if (!prime.tag) continue;
@ -20,7 +20,6 @@ function applyVariantData(data, para, argv) {
const userComposite = new Composite("{user}", argv.variants); const userComposite = new Composite("{user}", argv.variants);
userComposite.resolve(para, parsed.selectorTree, parsed.composites, variantSelector); userComposite.resolve(para, parsed.selectorTree, parsed.composites, variantSelector);
} }
para.variants = { para.variants = {
selectorTree: parsed.selectorTree, selectorTree: parsed.selectorTree,
primes: parsed.primes, primes: parsed.primes,
@ -30,7 +29,7 @@ function applyVariantData(data, para, argv) {
} }
exports.parse = parseVariantsData; exports.parse = parseVariantsData;
function parseVariantsData(data) { function parseVariantsData(data, argv) {
const primes = new Map(); const primes = new Map();
const selectorTree = new SelectorTree(); const selectorTree = new SelectorTree();
for (const k in data.prime) { for (const k in data.prime) {
@ -45,7 +44,13 @@ function parseVariantsData(data) {
const comp = new Composite(k, data.composite[k]); const comp = new Composite(k, data.composite[k]);
composites.set(k, comp); composites.set(k, comp);
} }
if (argv && argv.compositesFromBuildPlan) {
for (const k in argv.compositesFromBuildPlan) {
const key = `buildPlans.${k}`;
const comp = new Composite(key, argv.compositesFromBuildPlan[k]);
composites.set(key, comp);
}
}
return { selectorTree: selectorTree, primes, composites, defaultComposite }; return { selectorTree: selectorTree, primes, composites, defaultComposite };
} }

View file

@ -158,6 +158,18 @@ const GroupFontsOf = computed.group("metadata:group-fonts-of", async (target, gi
return plan.targets; return plan.targets;
}); });
const CompositesFromBuildPlan = computed(`metadata:composites-from-build-plan`, async target => {
const [{ buildPlans }] = await target.need(BuildPlans);
let data = {};
for (const bpn in buildPlans) {
let bp = buildPlans[bpn];
if (bp.variants) {
data[bpn] = bp.variants;
}
}
return data;
});
const FontInfoOf = computed.group("metadata:font-info-of", async (target, fileName) => { const FontInfoOf = computed.group("metadata:font-info-of", async (target, fileName) => {
const [{ fileNameToBpMap, buildPlans }] = await target.need(BuildPlans); const [{ fileNameToBpMap, buildPlans }] = await target.need(BuildPlans);
const [version] = await target.need(Version); const [version] = await target.need(Version);
@ -304,6 +316,7 @@ const DistUnhintedTTF = file.make(
(gr, fn) => `${DIST}/${gr}/ttf-unhinted/${fn}.ttf`, (gr, fn) => `${DIST}/${gr}/ttf-unhinted/${fn}.ttf`,
async (target, out, gr, fn) => { async (target, out, gr, fn) => {
await target.need(Scripts, Parameters, Dependencies); await target.need(Scripts, Parameters, Dependencies);
const [compositesFromBuildPlan] = await target.need(CompositesFromBuildPlan);
const charMapDir = `${BUILD}/ttf/${gr}`; const charMapDir = `${BUILD}/ttf/${gr}`;
const charMapPath = `${charMapDir}/${fn}.charmap.mpz`; const charMapPath = `${charMapDir}/${fn}.charmap.mpz`;
const cachePath = `${charMapDir}/${fn}.cache.mpz`; const cachePath = `${charMapDir}/${fn}.cache.mpz`;
@ -314,6 +327,7 @@ const DistUnhintedTTF = file.make(
o: out.full, o: out.full,
oCharMap: charMapPath, oCharMap: charMapPath,
oCache: cachePath, oCache: cachePath,
compositesFromBuildPlan,
...fi ...fi
}); });
} }