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)