diff --git a/scripts/subsetFonts.py b/scripts/subsetFonts.py index e017558de..78fee145d 100755 --- a/scripts/subsetFonts.py +++ b/scripts/subsetFonts.py @@ -175,6 +175,27 @@ def check_coverage(release: Path, subsets: dict[str, str]) -> None: sys.exit("add the missing codepoints to a subset in scripts/fontSubsets.json") +# U+FE0E VARIATION SELECTOR-15 requests the text presentation of a character +# that also has an emoji form; markdown-it's footnote back-reference is one +# ("↩︎" is U+21A9 U+FE0E). WebKit shapes such a sequence only with a font that +# has a glyph for every code point in it, and Inter maps nothing to U+FE0E, so +# Safari passes over Inter and draws the arrow with -apple-system instead - on +# iOS a visibly thinner, smaller glyph (vuejs/vitepress#5428). Mapping the +# selector to Inter's empty, zero-advance ZERO WIDTH SPACE glyph in every face +# keeps the sequence in Inter without adding a glyph, so the variable-font +# tables stay untouched. U+FE0F, the emoji selector, is left unmapped on +# purpose: "↩️" should keep falling through to the emoji font. +ZERO_WIDTH_SPACE = 0x200B +TEXT_PRESENTATION_SELECTOR = 0xFE0E + + +def map_text_presentation_selector(font: TTFont) -> None: + zwsp = font.getBestCmap()[ZERO_WIDTH_SPACE] + for table in font["cmap"].tables: + if table.isUnicode(): + table.cmap[TEXT_PRESENTATION_SELECTOR] = zwsp + + def build_subsets(release: Path, subsets: dict[str, str]) -> None: for style, (file, _) in STYLES.items(): for name, value in subsets.items(): @@ -188,8 +209,9 @@ def build_subsets(release: Path, subsets: dict[str, str]) -> None: options.name_IDs = [*options.name_IDs, 13, 14] font = subset.load_font(release / file, options) subsetter = subset.Subsetter(options) - subsetter.populate(unicodes=parse_ranges(value)) + subsetter.populate(unicodes=parse_ranges(value) | {ZERO_WIDTH_SPACE}) subsetter.subset(font) + map_text_presentation_selector(font) buf = io.BytesIO() subset.save_font(font, buf, options) out = FONTS_DIR / f"inter-{style}-{name}.woff2" diff --git a/src/client/theme-default/fonts/inter-italic-cyrillic-ext.woff2 b/src/client/theme-default/fonts/inter-italic-cyrillic-ext.woff2 index 296d735cf..9c9ba19b1 100644 Binary files a/src/client/theme-default/fonts/inter-italic-cyrillic-ext.woff2 and b/src/client/theme-default/fonts/inter-italic-cyrillic-ext.woff2 differ diff --git a/src/client/theme-default/fonts/inter-italic-cyrillic.woff2 b/src/client/theme-default/fonts/inter-italic-cyrillic.woff2 index d93e52276..0d3ac06c3 100644 Binary files a/src/client/theme-default/fonts/inter-italic-cyrillic.woff2 and b/src/client/theme-default/fonts/inter-italic-cyrillic.woff2 differ diff --git a/src/client/theme-default/fonts/inter-italic-greek-ext.woff2 b/src/client/theme-default/fonts/inter-italic-greek-ext.woff2 index dcb14fc1e..92b8a99c1 100644 Binary files a/src/client/theme-default/fonts/inter-italic-greek-ext.woff2 and b/src/client/theme-default/fonts/inter-italic-greek-ext.woff2 differ diff --git a/src/client/theme-default/fonts/inter-italic-greek.woff2 b/src/client/theme-default/fonts/inter-italic-greek.woff2 index 14c1212fa..f2d9bca02 100644 Binary files a/src/client/theme-default/fonts/inter-italic-greek.woff2 and b/src/client/theme-default/fonts/inter-italic-greek.woff2 differ diff --git a/src/client/theme-default/fonts/inter-italic-latin-ext.woff2 b/src/client/theme-default/fonts/inter-italic-latin-ext.woff2 index a57883d7a..89d55de62 100644 Binary files a/src/client/theme-default/fonts/inter-italic-latin-ext.woff2 and b/src/client/theme-default/fonts/inter-italic-latin-ext.woff2 differ diff --git a/src/client/theme-default/fonts/inter-italic-latin.woff2 b/src/client/theme-default/fonts/inter-italic-latin.woff2 index 8273dc04e..e584d6375 100644 Binary files a/src/client/theme-default/fonts/inter-italic-latin.woff2 and b/src/client/theme-default/fonts/inter-italic-latin.woff2 differ diff --git a/src/client/theme-default/fonts/inter-italic-symbols.woff2 b/src/client/theme-default/fonts/inter-italic-symbols.woff2 index 78f75ae40..19308807b 100644 Binary files a/src/client/theme-default/fonts/inter-italic-symbols.woff2 and b/src/client/theme-default/fonts/inter-italic-symbols.woff2 differ diff --git a/src/client/theme-default/fonts/inter-italic-vietnamese.woff2 b/src/client/theme-default/fonts/inter-italic-vietnamese.woff2 index ead7a46d9..c9ae8fec7 100644 Binary files a/src/client/theme-default/fonts/inter-italic-vietnamese.woff2 and b/src/client/theme-default/fonts/inter-italic-vietnamese.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-cyrillic-ext.woff2 b/src/client/theme-default/fonts/inter-roman-cyrillic-ext.woff2 index ff7282ebc..e79ed364b 100644 Binary files a/src/client/theme-default/fonts/inter-roman-cyrillic-ext.woff2 and b/src/client/theme-default/fonts/inter-roman-cyrillic-ext.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-cyrillic.woff2 b/src/client/theme-default/fonts/inter-roman-cyrillic.woff2 index 918fb15e6..cb462720d 100644 Binary files a/src/client/theme-default/fonts/inter-roman-cyrillic.woff2 and b/src/client/theme-default/fonts/inter-roman-cyrillic.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-greek-ext.woff2 b/src/client/theme-default/fonts/inter-roman-greek-ext.woff2 index 9e5aa6541..b51607db7 100644 Binary files a/src/client/theme-default/fonts/inter-roman-greek-ext.woff2 and b/src/client/theme-default/fonts/inter-roman-greek-ext.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-greek.woff2 b/src/client/theme-default/fonts/inter-roman-greek.woff2 index 152f6b73b..cbc3d3782 100644 Binary files a/src/client/theme-default/fonts/inter-roman-greek.woff2 and b/src/client/theme-default/fonts/inter-roman-greek.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-latin-ext.woff2 b/src/client/theme-default/fonts/inter-roman-latin-ext.woff2 index 788a467d6..e050c9ceb 100644 Binary files a/src/client/theme-default/fonts/inter-roman-latin-ext.woff2 and b/src/client/theme-default/fonts/inter-roman-latin-ext.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-latin.woff2 b/src/client/theme-default/fonts/inter-roman-latin.woff2 index d097292f8..3153aa8d4 100644 Binary files a/src/client/theme-default/fonts/inter-roman-latin.woff2 and b/src/client/theme-default/fonts/inter-roman-latin.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-symbols.woff2 b/src/client/theme-default/fonts/inter-roman-symbols.woff2 index 02122e7c4..7cc6361aa 100644 Binary files a/src/client/theme-default/fonts/inter-roman-symbols.woff2 and b/src/client/theme-default/fonts/inter-roman-symbols.woff2 differ diff --git a/src/client/theme-default/fonts/inter-roman-vietnamese.woff2 b/src/client/theme-default/fonts/inter-roman-vietnamese.woff2 index 11f0e98df..1f1cfa0f9 100644 Binary files a/src/client/theme-default/fonts/inter-roman-vietnamese.woff2 and b/src/client/theme-default/fonts/inter-roman-vietnamese.woff2 differ