diff --git a/package.json b/package.json index e153ab1..966ffc7 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "vite build", "preview": "vite preview", "check": "svelte-check --tsconfig ./tsconfig.json", - "deploy": "cd _scripts && deploy.sh" + "deploy": "yarn && cd _scripts && deploy.sh" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^2.0.3", @@ -20,6 +20,6 @@ "vite": "^4.3.2" }, "dependencies": { - "pb-parser": "git+https://git.sofiaritz.com/sofia/pb-parser" + "gfonts-js-library": "git+https://git.sofiaritz.com/GFonts/gfonts-js-library" } } diff --git a/src/lib/css/app.css b/src/css/app.css similarity index 100% rename from src/lib/css/app.css rename to src/css/app.css diff --git a/src/lib/css/fonts.css b/src/css/fonts.css similarity index 100% rename from src/lib/css/fonts.css rename to src/css/fonts.css diff --git a/src/lib/css2.ts b/src/lib/css2.ts deleted file mode 100644 index fd7b6c1..0000000 --- a/src/lib/css2.ts +++ /dev/null @@ -1,64 +0,0 @@ -export type Variant = { weight: number, style: string } - -export interface Family { - font: string, - variants: Variant[], -} - -/** - * @param input The input should look like this: `Fira+Sans:ital,wght@1,200;1,500` - */ -export function parse_family(input: string): Family { - let [rfont, rvariants] = input.split(":") - - let font = rfont.replaceAll("+", "").toLowerCase() - let variants: Variant[] = [] - if(rvariants != null && rvariants.length > 0) { - let rfragments = rvariants.split("@").filter(v => v.length > 0) - let fragments - let with_weight = rfragments[0].includes("wght") - let with_ital = rfragments[0].includes("ital") - if (with_ital || with_weight) { - fragments = rfragments[1] - } else { - fragments = rfragments[0] - } - - let rsubvariants = fragments.split(";") - for (let rvariant of rsubvariants) { - if (with_weight) { - if (rvariant.includes(",")) { - let variant = rvariant.split(",") - variants.push({ - weight: Number(variant[1]), - style: Number(variant[0]) === 1 ? "italic" : "normal", - }) - } else { - variants.push({ - weight: Number(rvariant), - style: "normal", - }) - } - } else if(with_ital) { - let italvariants = rvariant.split(",") - for (let variant of italvariants) { - variants.push({ - weight: 400, - style: Number(variant) === 1 ? "italic" : "normal" - }) - } - } - } - } else { - // TODO(sofia@git.sofiaritz.com): Is this the default value? - variants.push({ - weight: 400, - style: "normal", - }) - } - - return { - font, - variants, - } -} diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 3f351c0..2cef25a 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,5 +1,5 @@ -import {parse} from "pb-parser"; -import {parse_family, type Variant} from "./css2"; +import {parse_spec, type Variant} from "gfonts-js-library/src/css2"; +import {retrieve_font_metadata} from "gfonts-js-library/src/metadata" interface MirrorVariant { path: string, @@ -27,50 +27,6 @@ function to_array(v) { return [v] } } - -function font_base_url(font, folder, mirror) { - return `${mirror}/${folder}/${font}` -} -async function get_font_metadata(font, mirror) { - let base_url - let response - // TODO(sofia@git.sofiaritz.com): Improve this re-trying logic. This feels wrong 😭 - try { - base_url = font_base_url(font, "ofl", mirror) - let rresponse = await (await fetch(base_url + "/METADATA.pb")) - if (rresponse.ok) { - response = await rresponse.text() - } else { - throw new Error("Font not found.") - } - } catch (e) { - try { - base_url = font_base_url(font, "ufl", mirror) - let rresponse = await (await fetch(base_url + "/METADATA.pb")) - if (rresponse.ok) { - response = await rresponse.text() - } else { - throw new Error("Font not found.") - } - } catch (e) { - try { - base_url = font_base_url(font, "apache", mirror) - let rresponse = await (await fetch(base_url + "/METADATA.pb")) - if (rresponse.ok) { - response = await rresponse.text() - } else { - throw new Error("Font not found.") - } - } catch (e) { - console.error("Font not found.") - throw new Error(`"${font}" not found in mirror "${mirror}".`) - } - } - } - - return {base_url, parsed: parse(response)} -} - export async function css2_to_cssfile(css2_url, mirror): Promise { let url = css2_url .replace("https://fonts.googleapis.com/css2", "") @@ -81,9 +37,9 @@ export async function css2_to_cssfile(css2_url, mirror): Promise { rfamilies.shift() let mirror_meta = await Promise.all(rfamilies .map(v => v.replace("?family=", "")) - .map(parse_family) + .map(parse_spec) .map(async (v) => { - let {base_url, parsed: metadata} = await get_font_metadata(v.font, mirror) + let {url, metadata} = await retrieve_font_metadata(v.font, mirror) let fonts = [] for (let variant of v.variants) { let { weight, style }: Variant = variant @@ -94,7 +50,7 @@ export async function css2_to_cssfile(css2_url, mirror): Promise { if (style === "italic") { fonts.push({ name: metadata.name, - path: base_url + "/" + font.filename, + path: url + "/" + font.filename, weight, style, }) @@ -106,7 +62,7 @@ export async function css2_to_cssfile(css2_url, mirror): Promise { if (matched === false) { fonts.push({ name: metadata.name, - path: base_url + "/" + rfonts[0].filename, + path: url + "/" + rfonts[0].filename, weight, style, }) diff --git a/src/main.ts b/src/main.ts index e98c083..66ae76b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,5 @@ -import "./lib/css/fonts.css" -import "./lib/css/app.css" +import "./css/fonts.css" +import "./css/app.css" import App from "./App.svelte" const app = new App({