mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-03 15:07:42 +02:00
Add fallback fonts
This commit is contained in:
Binary file not shown.
Binary file not shown.
+1
-1
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user