/* This file is generated by scripts/generate-noto-jp-loader.ts. */ import unicodeRanges from "@fontsource-variable/noto-sans-jp/unicode.json"; import font0 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-0-wght-normal.woff2"; import font1 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-1-wght-normal.woff2"; import font2 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-2-wght-normal.woff2"; import font3 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-3-wght-normal.woff2"; import font4 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-4-wght-normal.woff2"; import font5 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-5-wght-normal.woff2"; import font6 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-6-wght-normal.woff2"; import font7 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-7-wght-normal.woff2"; import font8 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-8-wght-normal.woff2"; import font9 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-9-wght-normal.woff2"; import font10 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-10-wght-normal.woff2"; import font11 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-11-wght-normal.woff2"; import font12 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-12-wght-normal.woff2"; import font13 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-13-wght-normal.woff2"; import font14 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-14-wght-normal.woff2"; import font15 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-15-wght-normal.woff2"; import font16 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-16-wght-normal.woff2"; import font17 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-17-wght-normal.woff2"; import font18 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-18-wght-normal.woff2"; import font19 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-19-wght-normal.woff2"; import font20 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-20-wght-normal.woff2"; import font21 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-21-wght-normal.woff2"; import font22 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-22-wght-normal.woff2"; import font23 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-23-wght-normal.woff2"; import font24 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-24-wght-normal.woff2"; import font25 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-25-wght-normal.woff2"; import font26 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-26-wght-normal.woff2"; import font27 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-27-wght-normal.woff2"; import font28 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-28-wght-normal.woff2"; import font29 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-29-wght-normal.woff2"; import font30 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-30-wght-normal.woff2"; import font31 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-31-wght-normal.woff2"; import font32 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-32-wght-normal.woff2"; import font33 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-33-wght-normal.woff2"; import font34 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-34-wght-normal.woff2"; import font35 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-35-wght-normal.woff2"; import font36 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-36-wght-normal.woff2"; import font37 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-37-wght-normal.woff2"; import font38 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-38-wght-normal.woff2"; import font39 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-39-wght-normal.woff2"; import font40 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-40-wght-normal.woff2"; import font41 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-41-wght-normal.woff2"; import font42 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-42-wght-normal.woff2"; import font43 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-43-wght-normal.woff2"; import font44 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-44-wght-normal.woff2"; import font45 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-45-wght-normal.woff2"; import font46 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-46-wght-normal.woff2"; import font47 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-47-wght-normal.woff2"; import font48 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-48-wght-normal.woff2"; import font49 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-49-wght-normal.woff2"; import font50 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-50-wght-normal.woff2"; import font51 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-51-wght-normal.woff2"; import font52 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-52-wght-normal.woff2"; import font53 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-53-wght-normal.woff2"; import font54 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-54-wght-normal.woff2"; import font55 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-55-wght-normal.woff2"; import font56 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-56-wght-normal.woff2"; import font57 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-57-wght-normal.woff2"; import font58 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-58-wght-normal.woff2"; import font59 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-59-wght-normal.woff2"; import font60 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-60-wght-normal.woff2"; import font61 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-61-wght-normal.woff2"; import font62 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-62-wght-normal.woff2"; import font63 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-63-wght-normal.woff2"; import font64 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-64-wght-normal.woff2"; import font65 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-65-wght-normal.woff2"; import font66 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-66-wght-normal.woff2"; import font67 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-67-wght-normal.woff2"; import font68 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-68-wght-normal.woff2"; import font69 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-69-wght-normal.woff2"; import font70 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-70-wght-normal.woff2"; import font71 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-71-wght-normal.woff2"; import font72 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-72-wght-normal.woff2"; import font73 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-73-wght-normal.woff2"; import font74 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-74-wght-normal.woff2"; import font75 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-75-wght-normal.woff2"; import font76 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-76-wght-normal.woff2"; import font77 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-77-wght-normal.woff2"; import font78 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-78-wght-normal.woff2"; import font79 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-79-wght-normal.woff2"; import font80 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-80-wght-normal.woff2"; import font81 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-81-wght-normal.woff2"; import font82 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-82-wght-normal.woff2"; import font83 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-83-wght-normal.woff2"; import font84 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-84-wght-normal.woff2"; import font85 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-85-wght-normal.woff2"; import font86 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-86-wght-normal.woff2"; import font87 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-87-wght-normal.woff2"; import font88 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-88-wght-normal.woff2"; import font89 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-89-wght-normal.woff2"; import font90 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-90-wght-normal.woff2"; import font91 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-91-wght-normal.woff2"; import font92 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-92-wght-normal.woff2"; import font93 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-93-wght-normal.woff2"; import font94 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-94-wght-normal.woff2"; import font95 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-95-wght-normal.woff2"; import font96 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-96-wght-normal.woff2"; import font97 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-97-wght-normal.woff2"; import font98 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-98-wght-normal.woff2"; import font99 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-99-wght-normal.woff2"; import font100 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-100-wght-normal.woff2"; import font101 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-101-wght-normal.woff2"; import font102 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-102-wght-normal.woff2"; import font103 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-103-wght-normal.woff2"; import font104 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-104-wght-normal.woff2"; import font105 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-105-wght-normal.woff2"; import font106 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-106-wght-normal.woff2"; import font107 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-107-wght-normal.woff2"; import font108 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-108-wght-normal.woff2"; import font109 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-109-wght-normal.woff2"; import font110 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-110-wght-normal.woff2"; import font111 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-111-wght-normal.woff2"; import font112 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-112-wght-normal.woff2"; import font113 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-113-wght-normal.woff2"; import font114 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-114-wght-normal.woff2"; import font115 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-115-wght-normal.woff2"; import font116 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-116-wght-normal.woff2"; import font117 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-117-wght-normal.woff2"; import font118 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-118-wght-normal.woff2"; import font119 from "@fontsource-variable/noto-sans-jp/files/noto-sans-jp-119-wght-normal.woff2"; const fontUrls: Record = { "[0]": font0, "[1]": font1, "[2]": font2, "[3]": font3, "[4]": font4, "[5]": font5, "[6]": font6, "[7]": font7, "[8]": font8, "[9]": font9, "[10]": font10, "[11]": font11, "[12]": font12, "[13]": font13, "[14]": font14, "[15]": font15, "[16]": font16, "[17]": font17, "[18]": font18, "[19]": font19, "[20]": font20, "[21]": font21, "[22]": font22, "[23]": font23, "[24]": font24, "[25]": font25, "[26]": font26, "[27]": font27, "[28]": font28, "[29]": font29, "[30]": font30, "[31]": font31, "[32]": font32, "[33]": font33, "[34]": font34, "[35]": font35, "[36]": font36, "[37]": font37, "[38]": font38, "[39]": font39, "[40]": font40, "[41]": font41, "[42]": font42, "[43]": font43, "[44]": font44, "[45]": font45, "[46]": font46, "[47]": font47, "[48]": font48, "[49]": font49, "[50]": font50, "[51]": font51, "[52]": font52, "[53]": font53, "[54]": font54, "[55]": font55, "[56]": font56, "[57]": font57, "[58]": font58, "[59]": font59, "[60]": font60, "[61]": font61, "[62]": font62, "[63]": font63, "[64]": font64, "[65]": font65, "[66]": font66, "[67]": font67, "[68]": font68, "[69]": font69, "[70]": font70, "[71]": font71, "[72]": font72, "[73]": font73, "[74]": font74, "[75]": font75, "[76]": font76, "[77]": font77, "[78]": font78, "[79]": font79, "[80]": font80, "[81]": font81, "[82]": font82, "[83]": font83, "[84]": font84, "[85]": font85, "[86]": font86, "[87]": font87, "[88]": font88, "[89]": font89, "[90]": font90, "[91]": font91, "[92]": font92, "[93]": font93, "[94]": font94, "[95]": font95, "[96]": font96, "[97]": font97, "[98]": font98, "[99]": font99, "[100]": font100, "[101]": font101, "[102]": font102, "[103]": font103, "[104]": font104, "[105]": font105, "[106]": font106, "[107]": font107, "[108]": font108, "[109]": font109, "[110]": font110, "[111]": font111, "[112]": font112, "[113]": font113, "[114]": font114, "[115]": font115, "[116]": font116, "[117]": font117, "[118]": font118, "[119]": font119, }; const loads = new Map>(); export async function loadNotoSansJp(text: string): Promise { const required = new Set(); for (const character of text) { const codePoint = character.codePointAt(0); if (codePoint === undefined) continue; for (const [key, range] of Object.entries(unicodeRanges)) { if (!fontUrls[key]) continue; if (rangeContains(range, codePoint)) { required.add(key); break; } } } await Promise.all([...required].map(loadShard)); } function loadShard(key: string): Promise { const existing = loads.get(key); if (existing) return existing; const url = fontUrls[key]; const unicodeRange = (unicodeRanges as Record)[key]; if (!url || !unicodeRange) throw new Error(`Missing Noto Sans JP shard ${key}`); const loading = new FontFace( "Noto Sans JP Variable", `url("${url}") format("woff2-variations")`, { style: "normal", weight: "100 900", unicodeRange }, ) .load() .then((font) => { document.fonts.add(font); }) .catch((error: unknown) => { loads.delete(key); throw error; }); loads.set(key, loading); return loading; } function rangeContains(range: string, codePoint: number): boolean { for (const token of range.split(",")) { const [startText, endText = startText] = token.trim().slice(2).split("-"); const start = Number.parseInt(startText ?? "", 16); const end = Number.parseInt(endText ?? "", 16); if (Number.isFinite(start) && codePoint >= start && codePoint <= end) return true; } return false; }