From 8d5b13ee03533f72954037608001d5d8b3029d0f Mon Sep 17 00:00:00 2001 From: Stephen Tse Date: Mon, 28 Apr 2025 14:58:06 -0700 Subject: [PATCH] fix(fonts): Fixed page title fonts not downloadable to local (#1898) * Fixed url parser regex not working for Google Fonts subset API * Prettier no --- quartz/util/theme.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/quartz/util/theme.ts b/quartz/util/theme.ts index 4a06425..ff4453b 100644 --- a/quartz/util/theme.ts +++ b/quartz/util/theme.ts @@ -107,6 +107,13 @@ export interface GoogleFontFile { extension: string } +const fontMimeMap: Record = { + truetype: "ttf", + woff: "woff", + woff2: "woff2", + opentype: "otf", +} + export async function processGoogleFonts( stylesheet: string, baseUrl: string, @@ -114,14 +121,16 @@ export async function processGoogleFonts( processedStylesheet: string fontFiles: GoogleFontFile[] }> { - const fontSourceRegex = /url\((https:\/\/fonts.gstatic.com\/s\/[^)]+\.(woff2|ttf))\)/g + const fontSourceRegex = + /url\((https:\/\/fonts.gstatic.com\/.+(?:\/|(?:kit=))(.+?)[.&].+?)\)\sformat\('(\w+?)'\);/g const fontFiles: GoogleFontFile[] = [] let processedStylesheet = stylesheet let match while ((match = fontSourceRegex.exec(stylesheet)) !== null) { const url = match[1] - const [filename, extension] = url.split("/").pop()!.split(".") + const filename = match[2] + const extension = fontMimeMap[match[3].toLowerCase()] const staticUrl = `https://${baseUrl}/static/fonts/${filename}.${extension}` processedStylesheet = processedStylesheet.replace(url, staticUrl)