full site update

This commit is contained in:
2025-07-24 18:46:24 +02:00
parent bfe2b90d8d
commit 37a6e0ab31
6912 changed files with 540482 additions and 361712 deletions

37
node_modules/fontace/dist/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,37 @@
type FontStyle = 'auto' | 'normal' | 'italic' | 'oblique' | `oblique ${number}deg` | `oblique ${number}deg ${number}deg`;
type FontWeightAbsolute = 'normal' | 'bold' | `${number}`;
type FontWeight = 'auto' | FontWeightAbsolute | `${FontWeightAbsolute} ${FontWeightAbsolute}`;
interface FontMetadata {
/** The font family name as stored in the font file, e.g. `"Inter"`. */
family: string;
/** The range of Unicode code points this font file contains, e.g. `"U+0-10FFFF"`. */
unicodeRange: string;
/**
* Array of Unicode code point ranges this font file contains, e.g. `["U+0-10FFFF"]`,
* equivalent to `unicodeRange.split(', ')`.
*/
unicodeRangeArray: string[];
/** The style of this font file, e.g. `"normal"` or `"italic"`. */
style: FontStyle;
/** The font weight(s) this file supports, which can be a range for variable fonts, e.g. `"400"` or `"100 900"`. */
weight: FontWeight;
/** Font format compatible with `format()` values in `@font-face` `src` properties. */
format: 'truetype' | 'woff' | 'woff2';
/** Whether or not this font is variable. */
isVariable: boolean;
}
/**
* Infer font-face properties from a buffer containing font file data.
* @param fontBuffer Buffer containing font file data.
* @example
* import { fontace } from 'fontace';
* import fs from 'node:fs';
*
* const fontBuffer = fs.readFileSync('./Inter.ttf');
* const fontMetaData = fontace(fontBuffer);
* // { family: "Inter", style: "normal", weight: "400", unicodeRange: "U+0, U+20-7E...
*/
declare function fontace(fontBuffer: Buffer): FontMetadata;
export { fontace };

57
node_modules/fontace/dist/index.js generated vendored Normal file
View File

@@ -0,0 +1,57 @@
// src/index.ts
import { create } from "fontkit";
function getWeight(font) {
if (font.variationAxes.wght) {
return `${font.variationAxes.wght.min} ${font.variationAxes.wght.max}`;
}
const weight = font["OS/2"]?.usWeightClass || (font["OS/2"]?.fsSelection?.["bold"] ? 700 : 400);
return `${weight}`;
}
function getStyle(font) {
return font["OS/2"]?.fsSelection?.italic || font.italicAngle !== 0 ? "italic" : "normal";
}
function fontace(fontBuffer) {
const font = create(fontBuffer);
if (font.type === "TTC") {
throw new Error("TrueType Collection (TTC) files are not supported.");
} else if (font.type === "DFont") {
throw new Error("DFONT files are not supported.");
} else if (font.type !== "TTF" && font.type !== "WOFF" && font.type !== "WOFF2") {
throw new Error(`Unknown font type: ${font.type}`);
}
return {
...getUnicodeRange(font),
family: font.familyName,
style: getStyle(font),
weight: getWeight(font),
format: { TTF: "truetype", WOFF: "woff", WOFF2: "woff2" }[font.type],
isVariable: Object.keys(font.variationAxes).length > 0
};
}
function getUnicodeRange({ characterSet }) {
if (!characterSet || characterSet.length === 0) {
const defaultRange = "U+0-10FFFF";
return { unicodeRange: defaultRange, unicodeRangeArray: [defaultRange] };
}
characterSet.sort((a, b) => a - b);
const ranges = [];
let start = characterSet[0];
let end = start;
for (let i = 1; i < characterSet.length; i++) {
if (characterSet[i] === end + 1) {
end = characterSet[i];
} else {
ranges.push(formatRange(start, end));
start = characterSet[i];
end = start;
}
}
ranges.push(formatRange(start, end));
return { unicodeRange: ranges.join(", "), unicodeRangeArray: ranges };
}
function formatRange(start, end) {
return start === end ? `U+${start.toString(16).toUpperCase()}` : `U+${start.toString(16).toUpperCase()}-${end.toString(16).toUpperCase()}`;
}
export {
fontace
};