From 7852e82048c160a50406df9ee3fecf606d11cba0 Mon Sep 17 00:00:00 2001 From: Andreas Lind Date: Thu, 2 Sep 2021 00:53:18 +0200 Subject: [PATCH] Support tracing text in inline and external SVGs --- lib/gatherStylesheetsWithPredicates.js | 1 + lib/getCssRulesByProperty.js | 2 +- lib/subfont.js | 8 +- lib/subsetFonts.js | 111 +++++++++---- test/getCssRulesByProperty.js | 30 ++-- test/subsetFonts.js | 150 ++++++++++++++++++ .../svg/img-element/KFOmCnqEu92Fr1Mu4mxM.woff | Bin 0 -> 19824 bytes .../subsetFonts/svg/img-element/image.svg | 13 ++ .../subsetFonts/svg/img-element/index.html | 7 + .../KFOmCnqEu92Fr1Mu4mxM.woff | Bin 0 -> 19824 bytes .../index.html | 17 ++ .../KFOmCnqEu92Fr1Mu4mxM.woff | Bin 0 -> 19824 bytes .../index.html | 19 +++ 13 files changed, 304 insertions(+), 54 deletions(-) create mode 100644 testdata/subsetFonts/svg/img-element/KFOmCnqEu92Fr1Mu4mxM.woff create mode 100644 testdata/subsetFonts/svg/img-element/image.svg create mode 100644 testdata/subsetFonts/svg/img-element/index.html create mode 100644 testdata/subsetFonts/svg/inline-in-html-with-html-font-face/KFOmCnqEu92Fr1Mu4mxM.woff create mode 100644 testdata/subsetFonts/svg/inline-in-html-with-html-font-face/index.html create mode 100644 testdata/subsetFonts/svg/inline-in-html-with-own-font-face/KFOmCnqEu92Fr1Mu4mxM.woff create mode 100644 testdata/subsetFonts/svg/inline-in-html-with-own-font-face/index.html diff --git a/lib/gatherStylesheetsWithPredicates.js b/lib/gatherStylesheetsWithPredicates.js index 7325fa17..dd2e48dd 100644 --- a/lib/gatherStylesheetsWithPredicates.js +++ b/lib/gatherStylesheetsWithPredicates.js @@ -19,6 +19,7 @@ module.exports = function gatherStylesheetsWithPredicates( type: { $in: [ 'HtmlStyle', + 'SvgStyle', 'CssImport', 'HtmlConditionalComment', 'HtmlNoscript', diff --git a/lib/getCssRulesByProperty.js b/lib/getCssRulesByProperty.js index 28adbd1f..36907f9b 100644 --- a/lib/getCssRulesByProperty.js +++ b/lib/getCssRulesByProperty.js @@ -41,7 +41,7 @@ function getCssRulesByProperty(properties, cssSource, existingPredicates) { existingPredicates = existingPredicates || {}; const parseTree = postcss.parse(cssSource); - let defaultNamespaceURI = 'http://www.w3.org/1999/xhtml'; + let defaultNamespaceURI; parseTree.walkAtRules('namespace', (rule) => { const fragments = rule.params.split(/\s+/); if (fragments.length === 1) { diff --git a/lib/subfont.js b/lib/subfont.js index c9f75749..a1d9eb59 100644 --- a/lib/subfont.js +++ b/lib/subfont.js @@ -212,7 +212,7 @@ module.exports = async function subfont( isInline: false, isLoaded: true, type: { - $in: ['Html', 'Css', 'JavaScript'], + $in: ['Html', 'Svg', 'Css', 'JavaScript'], }, })) { sumSizesBefore += asset.rawSrc.length; @@ -233,7 +233,7 @@ module.exports = async function subfont( isInline: false, isLoaded: true, type: { - $in: ['Html', 'Css', 'JavaScript'], + $in: ['Html', 'Svg', 'Css', 'JavaScript'], }, })) { sumSizesAfter += asset.rawSrc.length; @@ -370,7 +370,9 @@ module.exports = async function subfont( } } log( - `HTML/JS/CSS size increase: ${prettyBytes(sumSizesAfter - sumSizesBefore)}` + `HTML/SVG/JS/CSS size increase: ${prettyBytes( + sumSizesAfter - sumSizesBefore + )}` ); log(`Total savings: ${prettyBytes(totalSavings)}`); if (!dryRun) { diff --git a/lib/subsetFonts.js b/lib/subsetFonts.js index e41b31f1..ed7cb749 100644 --- a/lib/subsetFonts.js +++ b/lib/subsetFonts.js @@ -578,11 +578,14 @@ async function subsetFonts( // Collect texts by page const memoizedGetCssRulesByProperty = memoizeSync(getCssRulesByProperty); - const htmlAssets = assetGraph.findAssets({ type: 'Html', isInline: false }); + const htmlAssets = assetGraph.findAssets({ + type: { $in: ['Html', 'Svg'] }, + isInline: false, + }); const traversalRelationQuery = { $or: [ { - type: { $in: ['HtmlStyle', 'CssImport'] }, + type: { $in: ['HtmlStyle', 'SvgStyle', 'CssImport'] }, }, { to: { @@ -672,7 +675,7 @@ async function subsetFonts( htmlAsset ), getCssRulesByProperty: memoizedGetCssRulesByProperty, - htmlAsset, + asset: htmlAsset, }); if (headlessBrowser) { textByProps.push(...(await headlessBrowser.tracePage(htmlAsset))); @@ -870,7 +873,7 @@ These glyphs are used on your site, but they don't exist in the font you applied accumulatedFontFaceDeclarations, } of htmlAssetTextsWithProps) { const insertionPoint = assetGraph.findRelations({ - type: 'HtmlStyle', + type: `${htmlAsset.type}Style`, from: htmlAsset, })[0]; const subsetFontUsages = fontUsages.filter( @@ -1051,21 +1054,23 @@ These glyphs are used on your site, but they don't exist in the font you applied // - https://caniuse.com/#search=woff2 // - https://caniuse.com/#search=preload - htmlAsset.addRelation( - { - type: 'HtmlPreloadLink', - hrefType, - to: fontAsset, - as: 'font', - }, - 'before', - insertionPoint - ); + if (htmlAsset.type === 'Html') { + htmlAsset.addRelation( + { + type: 'HtmlPreloadLink', + hrefType, + to: fontAsset, + as: 'font', + }, + 'before', + insertionPoint + ); + } } } const cssRelation = htmlAsset.addRelation( { - type: 'HtmlStyle', + type: `${htmlAsset.type}Style`, hrefType: inlineCss ? 'inline' : hrefType, to: cssAsset, }, @@ -1151,18 +1156,20 @@ These glyphs are used on your site, but they don't exist in the font you applied cssAsset.url = cssAssetUrl; } - // Create a that asyncLoadStyleRelationWithFallback can convert to async with noscript fallback: - const fallbackHtmlStyle = htmlAsset.addRelation({ - type: 'HtmlStyle', - to: cssAsset, - }); + if (htmlAsset.type === 'Html') { + // Create a that asyncLoadStyleRelationWithFallback can convert to async with noscript fallback: + const fallbackHtmlStyle = htmlAsset.addRelation({ + type: 'HtmlStyle', + to: cssAsset, + }); - asyncLoadStyleRelationWithFallback( - htmlAsset, - fallbackHtmlStyle, - hrefType - ); - relationsToRemove.add(fallbackHtmlStyle); + asyncLoadStyleRelationWithFallback( + htmlAsset, + fallbackHtmlStyle, + hrefType + ); + relationsToRemove.add(fallbackHtmlStyle); + } } } @@ -1200,11 +1207,13 @@ These glyphs are used on your site, but they don't exist in the font you applied if (googleFontStylesheetRelation.type === 'CssImport') { // Gather Html parents. Relevant if we are dealing with CSS @import relations htmlParents = getParents(googleFontStylesheetRelation.to, { - type: 'Html', + type: { $in: ['Html', 'Svg'] }, isInline: false, isLoaded: true, }); - } else if (googleFontStylesheetRelation.from.type === 'Html') { + } else if ( + ['Html', 'Svg'].includes(googleFontStylesheetRelation.from.type) + ) { htmlParents = [googleFontStylesheetRelation.from]; } else { htmlParents = []; @@ -1235,18 +1244,20 @@ These glyphs are used on your site, but they don't exist in the font you applied } const selfHostedFallbackRelation = htmlParent.addRelation( { - type: 'HtmlStyle', + type: `${htmlParent.type}Style`, to: selfHostedGoogleFontsCssAsset, hrefType, }, 'lastInBody' ); relationsToRemove.add(selfHostedFallbackRelation); - asyncLoadStyleRelationWithFallback( - htmlParent, - selfHostedFallbackRelation, - hrefType - ); + if (htmlParent.type === 'Html') { + asyncLoadStyleRelationWithFallback( + htmlParent, + selfHostedFallbackRelation, + hrefType + ); + } } relationsToRemove.add(googleFontStylesheetRelation); } @@ -1276,7 +1287,37 @@ These glyphs are used on your site, but they don't exist in the font you applied } let customPropertyDefinitions; // Avoid computing this unless necessary - // Inject subset font name before original webfont + // Inject subset font name before original webfont in SVG font-family attributes + const svgAssets = assetGraph.findAssets({ type: 'Svg' }); + for (const svgAsset of svgAssets) { + let changesMade = false; + for (const element of Array.from( + svgAsset.parseTree.querySelectorAll('[font-family]') + )) { + const fontFamilies = cssListHelpers.splitByCommas( + element.getAttribute('font-family') + ); + for (let i = 0; i < fontFamilies.length; i += 1) { + const subsetFontFamily = + webfontNameMap[fontFamily.parse(fontFamilies[i])[0].toLowerCase()]; + if (subsetFontFamily && !fontFamilies.includes(subsetFontFamily)) { + fontFamilies.splice( + i, + omitFallbacks ? 1 : 0, + cssQuoteIfNecessary(subsetFontFamily) + ); + i += 1; + element.setAttribute('font-family', fontFamilies.join(', ')); + changesMade = true; + } + } + } + if (changesMade) { + svgAsset.markDirty(); + } + } + + // Inject subset font name before original webfont in CSS const cssAssets = assetGraph.findAssets({ type: 'Css', isLoaded: true, diff --git a/test/getCssRulesByProperty.js b/test/getCssRulesByProperty.js index 8c76c46d..a68b893f 100644 --- a/test/getCssRulesByProperty.js +++ b/test/getCssRulesByProperty.js @@ -45,7 +45,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'color', value: 'red', @@ -54,7 +54,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h2', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'color', value: 'blue', @@ -76,7 +76,7 @@ describe('getCssRulesByProperty', function () { { selector: undefined, predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [1, 0, 0, 0], prop: 'color', value: 'red', @@ -99,7 +99,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'color', value: 'red', @@ -108,7 +108,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'color', value: 'blue', @@ -135,7 +135,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -146,7 +146,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -170,7 +170,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -181,7 +181,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -192,7 +192,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -203,7 +203,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -227,7 +227,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -238,7 +238,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font-size', value: '10px', @@ -247,7 +247,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font', value: '15px serif', @@ -256,7 +256,7 @@ describe('getCssRulesByProperty', function () { { selector: 'h1', predicates: {}, - namespaceURI: 'http://www.w3.org/1999/xhtml', + namespaceURI: undefined, specificityArray: [0, 0, 0, 1], prop: 'font-size', value: '20px', diff --git a/test/subsetFonts.js b/test/subsetFonts.js index b7f2ed0a..9f02583b 100644 --- a/test/subsetFonts.js +++ b/test/subsetFonts.js @@ -3276,4 +3276,154 @@ describe('subsetFonts', function () { ]); }); }); + + describe('with SVG using webfonts', function () { + describe('in a standalone SVG', function () { + it('should trace the correct characters and patch up the stylesheet', async function () { + const assetGraph = new AssetGraph({ + root: pathModule.resolve( + __dirname, + '../testdata/subsetFonts/svg/img-element/' + ), + }); + await assetGraph.loadAssets('index.html'); + await assetGraph.populate({ + followRelations: { + crossorigin: false, + }, + }); + const result = await subsetFonts(assetGraph); + + expect(result, 'to satisfy', { + fontInfo: [ + { + fontUsages: [ + { + text: ' !,Hdelorw', + props: { + 'font-stretch': 'normal', + 'font-weight': '400', + 'font-style': 'normal', + 'font-family': 'Roboto', + src: expect.it('to contain', "format('woff')"), + }, + }, + ], + }, + ], + }); + + const svgAsset = assetGraph.findAssets({ type: 'Svg' })[0]; + expect( + svgAsset.text, + 'to contain', + 'Hello, world!' + ); + + const svgStyle = assetGraph.findRelations({ type: 'SvgStyle' })[0]; + expect(svgStyle, 'to be defined'); + expect( + svgStyle.to.text, + 'to contain', + '@font-face{font-family:Roboto__subset;' + ); + }); + }); + + describe('within HTML', function () { + describe('using webfonts defined in a stylesheet in the HTML', function () { + it('should trace the correct characters and patch up the font-family attribute', async function () { + const assetGraph = new AssetGraph({ + root: pathModule.resolve( + __dirname, + '../testdata/subsetFonts/svg/inline-in-html-with-html-font-face/' + ), + }); + const [htmlAsset] = await assetGraph.loadAssets('index.html'); + await assetGraph.populate({ + followRelations: { + crossorigin: false, + }, + }); + const result = await subsetFonts(assetGraph); + + expect(result, 'to satisfy', { + fontInfo: [ + { + fontUsages: [ + { + text: ' !,Hdelorw', + props: { + 'font-stretch': 'normal', + 'font-weight': '400', + 'font-style': 'normal', + 'font-family': 'Roboto', + src: expect.it('to contain', "format('woff')"), + }, + }, + ], + }, + ], + }); + + expect( + htmlAsset.text, + 'to contain', + 'Hello, world!' + ); + }); + }); + + describe('using webfonts defined in a stylesheet defined in the SVG', function () { + it('should trace the correct characters and patch up the SVG stylesheet', async function () { + const assetGraph = new AssetGraph({ + root: pathModule.resolve( + __dirname, + '../testdata/subsetFonts/svg/inline-in-html-with-own-font-face/' + ), + }); + const [htmlAsset] = await assetGraph.loadAssets('index.html'); + await assetGraph.populate({ + followRelations: { + crossorigin: false, + }, + }); + const result = await subsetFonts(assetGraph); + + expect(result, 'to satisfy', { + fontInfo: [ + { + fontUsages: [ + { + text: ' !,Hdelorw', + props: { + 'font-stretch': 'normal', + 'font-weight': '400', + 'font-style': 'normal', + 'font-family': 'Roboto', + src: expect.it('to contain', "format('woff')"), + }, + }, + ], + }, + ], + }); + + expect( + htmlAsset.text, + 'to contain', + 'Hello, world!' + ); + + const svgStyle = assetGraph.findRelations({ type: 'SvgStyle' })[0]; + expect(svgStyle, 'to be defined'); + expect( + svgStyle.to.text, + 'to contain', + '@font-face{font-family:Roboto__subset;' + ); + }); + }); + }); + }); }); diff --git a/testdata/subsetFonts/svg/img-element/KFOmCnqEu92Fr1Mu4mxM.woff b/testdata/subsetFonts/svg/img-element/KFOmCnqEu92Fr1Mu4mxM.woff new file mode 100644 index 0000000000000000000000000000000000000000..92dfacc618f920a9dbf9cbbb844fb0d77072e37c GIT binary patch literal 19824 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
@2OLqbQUcK_7TQCUpOa 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 + + + + Hello, world! + diff --git a/testdata/subsetFonts/svg/img-element/index.html b/testdata/subsetFonts/svg/img-element/index.html new file mode 100644 index 00000000..0c5f8c1a --- /dev/null +++ b/testdata/subsetFonts/svg/img-element/index.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/testdata/subsetFonts/svg/inline-in-html-with-html-font-face/KFOmCnqEu92Fr1Mu4mxM.woff b/testdata/subsetFonts/svg/inline-in-html-with-html-font-face/KFOmCnqEu92Fr1Mu4mxM.woff new file mode 100644 index 0000000000000000000000000000000000000000..92dfacc618f920a9dbf9cbbb844fb0d77072e37c GIT binary patch literal 19824 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
@2OLqbQUcK_7TQCUpOa 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 + + + + + + Hello, world! + + + diff --git a/testdata/subsetFonts/svg/inline-in-html-with-own-font-face/KFOmCnqEu92Fr1Mu4mxM.woff b/testdata/subsetFonts/svg/inline-in-html-with-own-font-face/KFOmCnqEu92Fr1Mu4mxM.woff new file mode 100644 index 0000000000000000000000000000000000000000..92dfacc618f920a9dbf9cbbb844fb0d77072e37c GIT binary patch literal 19824 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
@2OLqbQUcK_7TQCUpOa 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 + + + + + + + + Hello, world! + + +