diff --git a/quartz/util/theme.ts b/quartz/util/theme.ts index 4a064255f..02e571062 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,15 @@ 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)