Add fallback fonts

This commit is contained in:
Dragon Fire
2021-02-21 15:53:14 -05:00
parent 8b9ac4dabe
commit 4d5a8a8a22
5 changed files with 13 additions and 8 deletions
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "xiao",
"version": "129.9.0",
"version": "129.9.1",
"description": "Your personal server companion.",
"main": "Xiao.js",
"scripts": {
+9 -6
View File
@@ -11,10 +11,7 @@ const weights = {
900: 'heavy',
950: 'extraBlack'
};
const variants = {
'Noto-CJK.otf': 'Noto Sans',
'Noto-Emoji.ttf': 'Noto Sans'
};
const fallbacks = ['Symbola', 'Noto-CJK'];
module.exports = class Font {
constructor(path, filename, metadata) {
@@ -25,6 +22,7 @@ module.exports = class Font {
this.weight = weights[metadata.weight] || metadata.weight || 'normal';
this.type = metadata.type;
this.registered = false;
this.fallbacks = fallbacks.filter(fallback => fallback !== this.filenameNoExt);
}
register() {
@@ -33,8 +31,9 @@ module.exports = class Font {
return registerFont(this.path, { family: this.filenameNoExt, style: this.style, weight: this.weight });
}
toCanvasString(size) {
return `${this.style} ${this.weight} ${size}px ${this.filenameNoExt}`;
toCanvasString(size, fallbacks = true) {
const shouldFall = fallbacks ? `, ${this.fallbacks.join(', ')}` : '';
return `${this.style} ${this.weight} ${size}px ${this.filenameNoExt}${shouldFall}`;
}
get filenameNoExt() {
@@ -44,4 +43,8 @@ module.exports = class Font {
get isVariant() {
return variants[this.filename];
}
get isFallback() {
return fallbacks.includes(this.filenameNoExt);
}
};
+3 -1
View File
@@ -9,6 +9,7 @@ module.exports = class FontArgumentType extends ArgumentType {
validate(value) {
const choice = value.toLowerCase();
let found = this.client.fonts.filter(font => {
if (font.isFallback) return false;
if (font.isVariant) return false;
if (font.name.toLowerCase().includes(choice)) return true;
if (font.filenameNoExt.toLowerCase().includes(choice)) return true;
@@ -24,13 +25,14 @@ module.exports = class FontArgumentType extends ArgumentType {
if (foundExact.size === 1) return true;
if (foundExact.size > 0) found = foundExact;
return found.size <= 15
? `${disambiguation(found.map(font => escapeMarkdown(font.name)), 'fonts', null)}\n`
? `${disambiguation(found.map(font => escapeMarkdown(font.filenameNoExt)), 'fonts', null)}\n`
: 'Multiple fonts found. Please be more specific.';
}
parse(value) {
const choice = value.toLowerCase();
const found = this.client.fonts.filter(font => {
if (font.isFallback) return false;
if (font.isVariant) return false;
if (font.name.toLowerCase().includes(choice)) return true;
if (font.filenameNoExt.toLowerCase().includes(choice)) return true;