From 31218f3a50a97e81676cfde1ca8b035726fcd1b5 Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Sun, 26 Jul 2026 16:31:47 -0400 Subject: [PATCH] Filter CSS-wide font keywords --- .../FontMaterialization/FontMaterializationPlanBuilder.php | 6 +++++- php-transformer/tests/contract/run.php | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/php-transformer/src/StaticSite/FontMaterialization/FontMaterializationPlanBuilder.php b/php-transformer/src/StaticSite/FontMaterialization/FontMaterializationPlanBuilder.php index d5298e05..46bb02ce 100644 --- a/php-transformer/src/StaticSite/FontMaterialization/FontMaterializationPlanBuilder.php +++ b/php-transformer/src/StaticSite/FontMaterialization/FontMaterializationPlanBuilder.php @@ -6,6 +6,7 @@ final class FontMaterializationPlanBuilder { public const SCHEMA = 'blocks-engine/php-transformer/font-materialization-plan/v1'; + private const CSS_WIDE_KEYWORDS = array('inherit', 'initial', 'revert', 'revert-layer', 'unset'); /** * @param array> $fontUsage @@ -365,7 +366,10 @@ private function cssCustomProperties(string $css): array */ private function isInvalidFontFamily(string $family): bool { - return str_contains($family, '(') || str_contains($family, ')') || str_starts_with($family, '--'); + return str_contains($family, '(') + || str_contains($family, ')') + || str_starts_with($family, '--') + || in_array(strtolower($family), self::CSS_WIDE_KEYWORDS, true); } /** diff --git a/php-transformer/tests/contract/run.php b/php-transformer/tests/contract/run.php index 628829a7..0ef48f8d 100644 --- a/php-transformer/tests/contract/run.php +++ b/php-transformer/tests/contract/run.php @@ -2571,9 +2571,15 @@ public function match(DOMElement $element, PatternContext $context): ?array array('family' => 'Open Sans', 'weights' => array(400, 700)), array('family' => 'Poppins', 'weights' => array(500)), array('family' => 'Arial', 'weights' => array(400)), + array('family' => 'inherit', 'weights' => array(400)), + array('family' => 'INITIAL', 'weights' => array(400)), + array('family' => 'unset', 'weights' => array(400)), + array('family' => 'revert', 'weights' => array(400)), + array('family' => 'revert-layer', 'weights' => array(400)), )); $assert('blocks-engine/php-transformer/font-materialization-plan/v1' === ($fontMaterializationPlan['schema'] ?? null), 'font materialization exposes schema'); $assert('@import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&family=Poppins:wght@500&display=swap");' === ($fontMaterializationPlan['css'] ?? null), 'font materialization builds deterministic google fonts css'); +$assert(array('Open Sans', 'Poppins') === array_column($fontMaterializationPlan['fonts'] ?? array(), 'family'), 'font materialization excludes web-safe and CSS-wide family keywords'); $assert('assets/css/fonts.css' === ($fontMaterializationPlan['stylesheets'][0]['path'] ?? null), 'font materialization emits stylesheet asset plan'); $fontAwarePlan = ( new MaterializationPlanBuilder() )->fromCompiledSite(array(