From bfdbb13faadda096a39414f25e355592b9c1a621 Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Sat, 27 Dec 2025 07:06:41 +0100 Subject: [PATCH 01/10] Add variable font support via font-variation-settings CSS property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Parse font-variation-settings CSS property - Auto-map font-weight/stretch/style to variation axes - Apply variations during text shaping via rustybuzz - Add FontVariationSettings to presentation attributes for CSS cascade 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- crates/usvg/Cargo.toml | 5 +- crates/usvg/codegen/attributes.txt | 1 + crates/usvg/src/parser/svgtree/mod.rs | 1 + crates/usvg/src/parser/svgtree/names.rs | 446 ++++++++++++------------ crates/usvg/src/parser/text.rs | 130 +++++++ crates/usvg/src/text/flatten.rs | 56 ++- crates/usvg/src/text/layout.rs | 35 +- crates/usvg/src/tree/text.rs | 39 +++ 8 files changed, 481 insertions(+), 232 deletions(-) diff --git a/crates/usvg/Cargo.toml b/crates/usvg/Cargo.toml index f9c1778e5..d38ac108c 100644 --- a/crates/usvg/Cargo.toml +++ b/crates/usvg/Cargo.toml @@ -38,6 +38,9 @@ siphasher = "1.0" # perfect hash implementation # text fontdb = { version = "0.23.0", default-features = false, optional = true } rustybuzz = { version = "0.20.1", optional = true } +# Note: ttf-parser is re-exported from rustybuzz, but we need gvar-alloc for variable fonts +# with many variation axes (like Roboto Flex which has 13 axes) +ttf-parser = { version = "0.25.1", features = ["gvar-alloc"], optional = true } unicode-bidi = { version = "0.3", optional = true } unicode-script = { version = "0.5", optional = true } unicode-vo = { version = "0.1", optional = true } @@ -49,7 +52,7 @@ once_cell = "1.5" default = ["text", "system-fonts", "memmap-fonts"] # Enables text-to-path conversion support. # Adds around 400KiB to your binary. -text = ["fontdb", "rustybuzz", "unicode-bidi", "unicode-script", "unicode-vo"] +text = ["fontdb", "rustybuzz", "ttf-parser", "unicode-bidi", "unicode-script", "unicode-vo"] # Enables system fonts loading. system-fonts = ["fontdb/fs", "fontdb/fontconfig"] # Enables font files memmaping for faster loading. diff --git a/crates/usvg/codegen/attributes.txt b/crates/usvg/codegen/attributes.txt index 32cac0622..bbc15b31c 100644 --- a/crates/usvg/codegen/attributes.txt +++ b/crates/usvg/codegen/attributes.txt @@ -51,6 +51,7 @@ font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position +font-variation-settings font-weight fr fx diff --git a/crates/usvg/src/parser/svgtree/mod.rs b/crates/usvg/src/parser/svgtree/mod.rs index 3591fd8f3..5b4c12b25 100644 --- a/crates/usvg/src/parser/svgtree/mod.rs +++ b/crates/usvg/src/parser/svgtree/mod.rs @@ -716,6 +716,7 @@ impl AId { | AId::FontStyle | AId::FontVariant | AId::FontWeight + | AId::FontVariationSettings | AId::GlyphOrientationHorizontal | AId::GlyphOrientationVertical | AId::ImageRendering diff --git a/crates/usvg/src/parser/svgtree/names.rs b/crates/usvg/src/parser/svgtree/names.rs index 1e6e2590c..34ccf7aff 100644 --- a/crates/usvg/src/parser/svgtree/names.rs +++ b/crates/usvg/src/parser/svgtree/names.rs @@ -216,6 +216,7 @@ pub enum AId { FontVariantLigatures, FontVariantNumeric, FontVariantPosition, + FontVariationSettings, FontWeight, Fr, Fx, @@ -375,261 +376,262 @@ pub enum AId { } static ATTRIBUTES: Map = Map { - key: 3347381344252206323, + key: 6925680744564340301, disps: &[ - (0, 111), + (0, 12), + (0, 1), (0, 2), - (0, 45), - (0, 5), + (0, 194), + (1, 0), + (2, 50), + (0, 29), + (0, 15), + (0, 24), + (0, 122), + (2, 164), + (0, 10), + (12, 101), + (2, 22), + (0, 89), (0, 1), - (2, 56), - (0, 5), - (2, 99), - (13, 198), - (0, 61), - (0, 52), - (1, 29), - (0, 21), - (0, 70), - (0, 164), - (2, 60), - (3, 52), + (0, 192), + (0, 40), + (5, 120), + (0, 0), + (2, 37), (0, 1), - (0, 86), - (0, 10), (0, 0), - (0, 4), - (2, 175), - (6, 59), - (1, 14), - (0, 13), - (3, 175), - (1, 10), - (2, 76), - (0, 53), - (0, 24), - (123, 202), - (0, 14), - (0, 30), - (0, 62), - (0, 98), - (11, 193), - (8, 79), - (0, 17), - (22, 5), - (36, 106), - (1, 1), + (0, 87), + (0, 47), + (0, 2), + (0, 31), + (0, 10), + (0, 66), + (0, 197), + (26, 127), + (1, 31), + (2, 191), + (51, 163), + (0, 158), + (1, 93), + (0, 10), + (3, 64), + (0, 42), + (7, 142), + (3, 140), + (0, 40), ], entries: &[ - ("mask-border-source", AId::MaskBorderSource), + ("line-height", AId::LineHeight), + ("text-align-last", AId::TextAlignLast), + ("filterUnits", AId::FilterUnits), + ("text-underline-position", AId::TextUnderlinePosition), + ("requiredFeatures", AId::RequiredFeatures), + ("shape-margin", AId::ShapeMargin), + ("points", AId::Points), + ("style", AId::Style), ("stop-opacity", AId::StopOpacity), - ("stroke-linejoin", AId::StrokeLinejoin), - ("dominant-baseline", AId::DominantBaseline), - ("spreadMethod", AId::SpreadMethod), - ("order", AId::Order), - ("stroke", AId::Stroke), - ("stitchTiles", AId::StitchTiles), - ("height", AId::Height), + ("mask-border-source", AId::MaskBorderSource), + ("k1", AId::K1), + ("r", AId::R), + ("flood-opacity", AId::FloodOpacity), ("font-size", AId::FontSize), - ("background-color", AId::BackgroundColor), - ("tableValues", AId::TableValues), - ("x1", AId::X1), - ("y", AId::Y), - ("width", AId::Width), - ("text-indent", AId::TextIndent), + ("filter", AId::Filter), + ("text-decoration-fill", AId::TextDecorationFill), + ("in", AId::In), + ("orient", AId::Orient), + ("text-orientation", AId::TextOrientation), + ("shape-padding", AId::ShapePadding), + ("alignment-baseline", AId::AlignmentBaseline), + ("unicode-range", AId::UnicodeRange), + ("marker-mid", AId::MarkerMid), + ("mask-border-repeat", AId::MaskBorderRepeat), + ("stitchTiles", AId::StitchTiles), + ("mask-type", AId::MaskType), + ("href", AId::Href), + ("z", AId::Z), + ("font-stretch", AId::FontStretch), + ("fr", AId::Fr), + ("shape-subtract", AId::ShapeSubtract), + ("mask-position", AId::MaskPosition), + ("fx", AId::Fx), + ("values", AId::Values), + ("pointsAtZ", AId::PointsAtZ), ("fill-opacity", AId::FillOpacity), - ("word-spacing", AId::WordSpacing), + ("diffuseConstant", AId::DiffuseConstant), ("cy", AId::Cy), - ("scale", AId::Scale), - ("x2", AId::X2), - ("lengthAdjust", AId::LengthAdjust), - ("glyph-orientation-horizontal", AId::GlyphOrientationHorizontal), - ("opacity", AId::Opacity), - ("mask-border", AId::MaskBorder), - ("font-stretch", AId::FontStretch), - ("stroke-dashoffset", AId::StrokeDashoffset), - ("fill", AId::Fill), - ("space", AId::Space), - ("baseline-shift", AId::BaselineShift), - ("text-align-last", AId::TextAlignLast), - ("font-variant-east-asian", AId::FontVariantEastAsian), - ("mask-border-mode", AId::MaskBorderMode), ("font-variant-caps", AId::FontVariantCaps), - ("gradientUnits", AId::GradientUnits), + ("stop-color", AId::StopColor), + ("y1", AId::Y1), + ("white-space", AId::WhiteSpace), + ("in2", AId::In2), + ("glyph-orientation-vertical", AId::GlyphOrientationVertical), + ("mask", AId::Mask), + ("font-style", AId::FontStyle), + ("color-interpolation", AId::ColorInterpolation), + ("flood-color", AId::FloodColor), + ("path", AId::Path), ("exponent", AId::Exponent), - ("text-decoration-color", AId::TextDecorationColor), - ("refX", AId::RefX), - ("enable-background", AId::EnableBackground), - ("mask-border-width", AId::MaskBorderWidth), - ("numOctaves", AId::NumOctaves), - ("kerning", AId::Kerning), - ("mix-blend-mode", AId::MixBlendMode), - ("mask-clip", AId::MaskClip), - ("mask-mode", AId::MaskMode), - ("type", AId::Type), - ("class", AId::Class), - ("font", AId::Font), - ("mask-border-repeat", AId::MaskBorderRepeat), - ("stroke-miterlimit", AId::StrokeMiterlimit), - ("text-decoration-stroke", AId::TextDecorationStroke), - ("z", AId::Z), - ("dx", AId::Dx), - ("clip-path", AId::ClipPath), - ("markerHeight", AId::MarkerHeight), - ("text-underline-position", AId::TextUnderlinePosition), - ("stdDeviation", AId::StdDeviation), + ("text-decoration", AId::TextDecoration), ("id", AId::Id), - ("paint-order", AId::PaintOrder), - ("elevation", AId::Elevation), - ("specularConstant", AId::SpecularConstant), - ("result", AId::Result), - ("font-size-adjust", AId::FontSizeAdjust), - ("mask-origin", AId::MaskOrigin), - ("direction", AId::Direction), - ("font-variant-numeric", AId::FontVariantNumeric), - ("startOffset", AId::StartOffset), - ("maskUnits", AId::MaskUnits), - ("font-variant", AId::FontVariant), - ("text-orientation", AId::TextOrientation), - ("amplitude", AId::Amplitude), + ("lighting-color", AId::LightingColor), + ("primitiveUnits", AId::PrimitiveUnits), + ("rotate", AId::Rotate), ("rx", AId::Rx), - ("mask-type", AId::MaskType), - ("filter", AId::Filter), - ("in", AId::In), - ("display", AId::Display), - ("seed", AId::Seed), - ("unicode-range", AId::UnicodeRange), + ("kernelMatrix", AId::KernelMatrix), ("color-profile", AId::ColorProfile), - ("x", AId::X), - ("href", AId::Href), - ("font-feature-settings", AId::FontFeatureSettings), - ("fill-rule", AId::FillRule), - ("fr", AId::Fr), + ("text-rendering", AId::TextRendering), + ("text-indent", AId::TextIndent), ("font-variant-ligatures", AId::FontVariantLigatures), - ("text-decoration-style", AId::TextDecorationStyle), - ("radius", AId::Radius), - ("xChannelSelector", AId::XChannelSelector), - ("orient", AId::Orient), - ("isolation", AId::Isolation), - ("gradientTransform", AId::GradientTransform), - ("transform-box", AId::TransformBox), - ("pointsAtY", AId::PointsAtY), - ("text-decoration-line", AId::TextDecorationLine), - ("requiredFeatures", AId::RequiredFeatures), - ("patternContentUnits", AId::PatternContentUnits), - ("shape-padding", AId::ShapePadding), - ("text-overflow", AId::TextOverflow), ("clipPathUnits", AId::ClipPathUnits), + ("font-family", AId::FontFamily), + ("mode", AId::Mode), + ("transform", AId::Transform), + ("visibility", AId::Visibility), + ("targetY", AId::TargetY), + ("x2", AId::X2), + ("lengthAdjust", AId::LengthAdjust), + ("font-weight", AId::FontWeight), + ("kerning", AId::Kerning), + ("clip", AId::Clip), + ("mask-border-width", AId::MaskBorderWidth), + ("shape-inside", AId::ShapeInside), + ("text-decoration-color", AId::TextDecorationColor), + ("width", AId::Width), + ("stroke-linejoin", AId::StrokeLinejoin), + ("image-rendering", AId::ImageRendering), ("azimuth", AId::Azimuth), - ("line-height", AId::LineHeight), - ("viewBox", AId::ViewBox), - ("preserveAspectRatio", AId::PreserveAspectRatio), - ("path", AId::Path), + ("font-variant-position", AId::FontVariantPosition), + ("elevation", AId::Elevation), + ("pointsAtX", AId::PointsAtX), + ("text-overflow", AId::TextOverflow), + ("color-interpolation-filters", AId::ColorInterpolationFilters), + ("font-variation-settings", AId::FontVariationSettings), + ("spreadMethod", AId::SpreadMethod), + ("stroke-opacity", AId::StrokeOpacity), + ("scale", AId::Scale), + ("enable-background", AId::EnableBackground), ("k4", AId::K4), + ("height", AId::Height), + ("inline-size", AId::InlineSize), + ("numOctaves", AId::NumOctaves), + ("k2", AId::K2), + ("dy", AId::Dy), ("systemLanguage", AId::SystemLanguage), - ("stroke-width", AId::StrokeWidth), - ("specularExponent", AId::SpecularExponent), - ("writing-mode", AId::WritingMode), - ("transform-origin", AId::TransformOrigin), - ("stroke-linecap", AId::StrokeLinecap), - ("points", AId::Points), - ("style", AId::Style), - ("pointsAtZ", AId::PointsAtZ), + ("limitingConeAngle", AId::LimitingConeAngle), + ("letter-spacing", AId::LetterSpacing), + ("fy", AId::Fy), + ("preserveAspectRatio", AId::PreserveAspectRatio), ("targetX", AId::TargetX), - ("font-synthesis", AId::FontSynthesis), - ("maskContentUnits", AId::MaskContentUnits), - ("text-align", AId::TextAlign), - ("cx", AId::Cx), - ("alignment-baseline", AId::AlignmentBaseline), + ("text-decoration-style", AId::TextDecorationStyle), + ("stroke-linecap", AId::StrokeLinecap), + ("font", AId::Font), ("font-kerning", AId::FontKerning), - ("requiredExtensions", AId::RequiredExtensions), - ("clip-rule", AId::ClipRule), - ("mask-border-outset", AId::MaskBorderOutset), - ("primitiveUnits", AId::PrimitiveUnits), - ("textLength", AId::TextLength), - ("text-decoration-fill", AId::TextDecorationFill), - ("fy", AId::Fy), - ("mask-size", AId::MaskSize), - ("k3", AId::K3), - ("marker-start", AId::MarkerStart), - ("mode", AId::Mode), - ("k1", AId::K1), + ("x1", AId::X1), + ("preserveAlpha", AId::PreserveAlpha), ("refY", AId::RefY), - ("y1", AId::Y1), - ("shape-rendering", AId::ShapeRendering), - ("operator", AId::Operator), - ("mask-image", AId::MaskImage), - ("marker-end", AId::MarkerEnd), - ("rotate", AId::Rotate), - ("limitingConeAngle", AId::LimitingConeAngle), - ("surfaceScale", AId::SurfaceScale), + ("glyph-orientation-horizontal", AId::GlyphOrientationHorizontal), ("intercept", AId::Intercept), - ("font-variant-position", AId::FontVariantPosition), - ("clip", AId::Clip), - ("fx", AId::Fx), - ("visibility", AId::Visibility), - ("shape-margin", AId::ShapeMargin), - ("font-style", AId::FontStyle), + ("clip-rule", AId::ClipRule), + ("overflow", AId::Overflow), + ("paint-order", AId::PaintOrder), + ("font-feature-settings", AId::FontFeatureSettings), ("y2", AId::Y2), - ("dy", AId::Dy), - ("yChannelSelector", AId::YChannelSelector), + ("font-variant", AId::FontVariant), ("ry", AId::Ry), - ("color-rendering", AId::ColorRendering), - ("white-space", AId::WhiteSpace), - ("patternUnits", AId::PatternUnits), - ("shape-subtract", AId::ShapeSubtract), - ("markerWidth", AId::MarkerWidth), - ("d", AId::D), - ("shape-inside", AId::ShapeInside), - ("preserveAlpha", AId::PreserveAlpha), - ("shape-image-threshold", AId::ShapeImageThreshold), - ("image-rendering", AId::ImageRendering), - ("marker-mid", AId::MarkerMid), - ("filterUnits", AId::FilterUnits), - ("bias", AId::Bias), - ("mask-border-slice", AId::MaskBorderSlice), - ("pointsAtX", AId::PointsAtX), - ("kernelMatrix", AId::KernelMatrix), - ("color-interpolation", AId::ColorInterpolation), - ("glyph-orientation-vertical", AId::GlyphOrientationVertical), - ("color", AId::Color), - ("patternTransform", AId::PatternTransform), - ("kernelUnitLength", AId::KernelUnitLength), + ("vector-effect", AId::VectorEffect), + ("amplitude", AId::Amplitude), + ("mask-origin", AId::MaskOrigin), ("markerUnits", AId::MarkerUnits), - ("font-weight", AId::FontWeight), - ("overflow", AId::Overflow), - ("stop-color", AId::StopColor), - ("r", AId::R), - ("k2", AId::K2), - ("text-anchor", AId::TextAnchor), - ("inline-size", AId::InlineSize), - ("unicode-bidi", AId::UnicodeBidi), - ("font-family", AId::FontFamily), - ("color-interpolation-filters", AId::ColorInterpolationFilters), - ("slope", AId::Slope), + ("marker-end", AId::MarkerEnd), ("baseFrequency", AId::BaseFrequency), - ("transform", AId::Transform), - ("text-rendering", AId::TextRendering), + ("mask-composite", AId::MaskComposite), + ("maskUnits", AId::MaskUnits), + ("requiredExtensions", AId::RequiredExtensions), + ("patternContentUnits", AId::PatternContentUnits), + ("color-rendering", AId::ColorRendering), + ("baseline-shift", AId::BaselineShift), + ("unicode-bidi", AId::UnicodeBidi), + ("mask-border-mode", AId::MaskBorderMode), + ("gradientTransform", AId::GradientTransform), + ("yChannelSelector", AId::YChannelSelector), + ("marker-start", AId::MarkerStart), + ("result", AId::Result), + ("writing-mode", AId::WritingMode), ("divisor", AId::Divisor), - ("edgeMode", AId::EdgeMode), - ("letter-spacing", AId::LetterSpacing), - ("flood-color", AId::FloodColor), - ("in2", AId::In2), + ("seed", AId::Seed), + ("font-variant-east-asian", AId::FontVariantEastAsian), + ("font-variant-numeric", AId::FontVariantNumeric), + ("isolation", AId::Isolation), + ("specularConstant", AId::SpecularConstant), + ("text-anchor", AId::TextAnchor), + ("display", AId::Display), + ("d", AId::D), + ("font-synthesis", AId::FontSynthesis), + ("stdDeviation", AId::StdDeviation), + ("specularExponent", AId::SpecularExponent), + ("tableValues", AId::TableValues), ("side", AId::Side), - ("mask-composite", AId::MaskComposite), - ("offset", AId::Offset), - ("values", AId::Values), - ("vector-effect", AId::VectorEffect), - ("mask", AId::Mask), + ("mask-image", AId::MaskImage), + ("text-decoration-stroke", AId::TextDecorationStroke), ("pathLength", AId::PathLength), - ("lighting-color", AId::LightingColor), - ("mask-position", AId::MaskPosition), + ("xChannelSelector", AId::XChannelSelector), + ("bias", AId::Bias), + ("space", AId::Space), + ("slope", AId::Slope), + ("shape-rendering", AId::ShapeRendering), + ("fill-rule", AId::FillRule), + ("mix-blend-mode", AId::MixBlendMode), + ("k3", AId::K3), + ("mask-border-outset", AId::MaskBorderOutset), + ("cx", AId::Cx), + ("stroke", AId::Stroke), + ("stroke-dashoffset", AId::StrokeDashoffset), + ("refX", AId::RefX), + ("markerWidth", AId::MarkerWidth), + ("startOffset", AId::StartOffset), + ("operator", AId::Operator), + ("dx", AId::Dx), + ("shape-image-threshold", AId::ShapeImageThreshold), + ("class", AId::Class), + ("markerHeight", AId::MarkerHeight), + ("transform-box", AId::TransformBox), + ("text-decoration-line", AId::TextDecorationLine), + ("gradientUnits", AId::GradientUnits), ("stroke-dasharray", AId::StrokeDasharray), - ("text-decoration", AId::TextDecoration), - ("stroke-opacity", AId::StrokeOpacity), - ("targetY", AId::TargetY), - ("flood-opacity", AId::FloodOpacity), - ("diffuseConstant", AId::DiffuseConstant), + ("patternUnits", AId::PatternUnits), + ("type", AId::Type), + ("offset", AId::Offset), + ("textLength", AId::TextLength), + ("text-align", AId::TextAlign), + ("color", AId::Color), + ("edgeMode", AId::EdgeMode), + ("mask-mode", AId::MaskMode), + ("word-spacing", AId::WordSpacing), + ("order", AId::Order), + ("clip-path", AId::ClipPath), + ("patternTransform", AId::PatternTransform), + ("mask-border-slice", AId::MaskBorderSlice), + ("background-color", AId::BackgroundColor), + ("mask-clip", AId::MaskClip), + ("radius", AId::Radius), + ("dominant-baseline", AId::DominantBaseline), + ("x", AId::X), + ("mask-border", AId::MaskBorder), + ("stroke-width", AId::StrokeWidth), + ("y", AId::Y), + ("font-size-adjust", AId::FontSizeAdjust), + ("fill", AId::Fill), + ("direction", AId::Direction), + ("stroke-miterlimit", AId::StrokeMiterlimit), + ("transform-origin", AId::TransformOrigin), + ("viewBox", AId::ViewBox), + ("kernelUnitLength", AId::KernelUnitLength), + ("maskContentUnits", AId::MaskContentUnits), + ("opacity", AId::Opacity), + ("mask-size", AId::MaskSize), + ("pointsAtY", AId::PointsAtY), + ("surfaceScale", AId::SurfaceScale), ], }; diff --git a/crates/usvg/src/parser/text.rs b/crates/usvg/src/parser/text.rs index 743756a05..c80b9929b 100644 --- a/crates/usvg/src/parser/text.rs +++ b/crates/usvg/src/parser/text.rs @@ -392,6 +392,49 @@ fn convert_font(node: SvgNode, state: &converter::State) -> Font { let style: FontStyle = node.find_attribute(AId::FontStyle).unwrap_or_default(); let stretch = conv_font_stretch(node); let weight = resolve_font_weight(node); + let mut variations = parse_font_variation_settings(node); + + // Auto-map standard font properties to variation axes if not explicitly set. + // This allows variable fonts to work with regular font-weight/font-stretch properties. + let has_wght = variations.iter().any(|v| &v.tag == b"wght"); + let has_wdth = variations.iter().any(|v| &v.tag == b"wdth"); + let has_ital = variations.iter().any(|v| &v.tag == b"ital"); + let has_slnt = variations.iter().any(|v| &v.tag == b"slnt"); + + // Map font-weight to wght axis (if not already set) + if !has_wght && weight != 400 { + variations.push(FontVariation::new(*b"wght", weight as f32)); + } + + // Map font-stretch to wdth axis (if not already set) + // CSS font-stretch percentages: ultra-condensed=50%, condensed=75%, normal=100%, expanded=125%, ultra-expanded=200% + if !has_wdth { + let wdth = match stretch { + FontStretch::UltraCondensed => 50.0, + FontStretch::ExtraCondensed => 62.5, + FontStretch::Condensed => 75.0, + FontStretch::SemiCondensed => 87.5, + FontStretch::Normal => 100.0, + FontStretch::SemiExpanded => 112.5, + FontStretch::Expanded => 125.0, + FontStretch::ExtraExpanded => 150.0, + FontStretch::UltraExpanded => 200.0, + }; + if wdth != 100.0 { + variations.push(FontVariation::new(*b"wdth", wdth)); + } + } + + // Map font-style: italic to ital axis (if not already set) + if !has_ital && style == FontStyle::Italic { + variations.push(FontVariation::new(*b"ital", 1.0)); + } + + // Map font-style: oblique to slnt axis (if not already set) + // Default oblique angle is typically 12-14 degrees + if !has_slnt && style == FontStyle::Oblique { + variations.push(FontVariation::new(*b"slnt", -12.0)); + } let font_families = if let Some(n) = node.ancestors().find(|n| n.has_attribute(AId::FontFamily)) { @@ -421,9 +464,96 @@ fn convert_font(node: SvgNode, state: &converter::State) -> Font { style, stretch, weight, + variations, } } +/// Parses the `font-variation-settings` CSS property. +/// +/// Syntax: `normal | [ ]#` +/// Example: `"wght" 700, "wdth" 50` +fn parse_font_variation_settings(node: SvgNode) -> Vec { + let value = if let Some(n) = node + .ancestors() + .find(|n| n.has_attribute(AId::FontVariationSettings)) + { + let v = n.attribute(AId::FontVariationSettings).unwrap_or(""); + log::debug!("Found font-variation-settings: '{}'", v); + v + } else { + return Vec::new(); + }; + + // "normal" means no variations + if value.eq_ignore_ascii_case("normal") || value.is_empty() { + return Vec::new(); + } + + let mut variations = Vec::new(); + + // Parse comma-separated list of "tag" value pairs + for part in value.split(',') { + let part = part.trim(); + if part.is_empty() { + continue; + } + + // Find the tag (quoted string) and value + // Format: "wght" 700 or 'wght' 700 + let mut chars = part.chars().peekable(); + + // Skip whitespace + while chars.peek().map_or(false, |c| c.is_whitespace()) { + chars.next(); + } + + // Parse quoted tag + let quote = match chars.next() { + Some('"') => '"', + Some('\'') => '\'', + _ => continue, // Invalid format + }; + + let mut tag_str = String::new(); + for c in chars.by_ref() { + if c == quote { + break; + } + tag_str.push(c); + } + + // Tag must be exactly 4 characters + if tag_str.len() != 4 { + log::warn!("Invalid font-variation-settings tag: '{}' (must be 4 characters)", tag_str); + continue; + } + + // Skip whitespace before value + while chars.peek().map_or(false, |c| c.is_whitespace()) { + chars.next(); + } + + // Parse the numeric value + let value_str: String = chars.collect(); + let value_str = value_str.trim(); + + let value = match value_str.parse::() { + Ok(v) => v, + Err(_) => { + log::warn!("Invalid font-variation-settings value: '{}'", value_str); + continue; + } + }; + + let tag_bytes = tag_str.as_bytes(); + let tag = [tag_bytes[0], tag_bytes[1], tag_bytes[2], tag_bytes[3]]; + + variations.push(FontVariation::new(tag, value)); + } + + variations +} + // TODO: properly resolve narrower/wider fn conv_font_stretch(node: SvgNode) -> FontStretch { if let Some(n) = node.ancestors().find(|n| n.has_attribute(AId::FontStretch)) { diff --git a/crates/usvg/src/text/flatten.rs b/crates/usvg/src/text/flatten.rs index 89929a08e..fc334cf3c 100644 --- a/crates/usvg/src/text/flatten.rs +++ b/crates/usvg/src/text/flatten.rs @@ -128,11 +128,18 @@ pub(crate) fn flatten(text: &mut Text, cache: &mut Cache) -> Option<(Group, NonZ group.calculate_bounding_boxes(); new_children.push(Node::Group(Box::new(group))); - } else if let Some(outline) = cache - .fontdb_outline(glyph.font, glyph.id) - .and_then(|p| p.transform(glyph.outline_transform())) - { - span_builder.push_path(&outline); + } else { + // For variable fonts, we need to extract the outline with variations applied. + // We can't use the cache here since the outline depends on variation values. + let outline = if glyph.variations.is_empty() { + cache.fontdb_outline(glyph.font, glyph.id) + } else { + cache.fontdb.outline_with_variations(glyph.font, glyph.id, &glyph.variations) + }; + + if let Some(outline) = outline.and_then(|p| p.transform(glyph.outline_transform())) { + span_builder.push_path(&outline); + } } } @@ -187,6 +194,12 @@ impl ttf_parser::OutlineBuilder for PathBuilder { pub(crate) trait DatabaseExt { fn outline(&self, id: ID, glyph_id: GlyphId) -> Option; + fn outline_with_variations( + &self, + id: ID, + glyph_id: GlyphId, + variations: &[crate::FontVariation], + ) -> Option; fn raster(&self, id: ID, glyph_id: GlyphId) -> Option; fn svg(&self, id: ID, glyph_id: GlyphId) -> Option; fn colr(&self, id: ID, glyph_id: GlyphId) -> Option; @@ -206,7 +219,38 @@ impl DatabaseExt for Database { #[inline(never)] fn outline(&self, id: ID, glyph_id: GlyphId) -> Option { self.with_face_data(id, |data, face_index| -> Option { - let font = ttf_parser::Face::parse(data, face_index).ok()?; + let mut font = ttf_parser::Face::parse(data, face_index).ok()?; + + // For variable fonts, we need to set default variation values to get proper outlines + if font.is_variable() { + for axis in font.variation_axes() { + font.set_variation(axis.tag, axis.def_value); + } + } + + let mut builder = PathBuilder { + builder: tiny_skia_path::PathBuilder::new(), + }; + + font.outline_glyph(glyph_id, &mut builder)?; + builder.builder.finish() + })? + } + + #[inline(never)] + fn outline_with_variations( + &self, + id: ID, + glyph_id: GlyphId, + variations: &[crate::FontVariation], + ) -> Option { + self.with_face_data(id, |data, face_index| -> Option { + let mut font = ttf_parser::Face::parse(data, face_index).ok()?; + + // Apply font variations for variable fonts + for v in variations { + font.set_variation(ttf_parser::Tag::from_bytes(&v.tag), v.value); + } let mut builder = PathBuilder { builder: tiny_skia_path::PathBuilder::new(), diff --git a/crates/usvg/src/text/layout.rs b/crates/usvg/src/text/layout.rs index 2261f66bb..ba15ee1ca 100644 --- a/crates/usvg/src/text/layout.rs +++ b/crates/usvg/src/text/layout.rs @@ -45,6 +45,8 @@ pub struct PositionedGlyph { /// The ID of the font the glyph should be taken from. Can be used with the /// [font database of the tree](crate::Tree::fontdb) this glyph is part of. pub font: ID, + /// Font variation settings for variable fonts. + pub variations: Vec, } impl PositionedGlyph { @@ -899,6 +901,7 @@ fn process_chunk( font, span.small_caps, span.apply_kerning, + &span.font.variations, resolver, fontdb, ); @@ -957,6 +960,7 @@ fn process_chunk( &glyphs[range], &chunk.text, span.font_size.get(), + &span.font.variations, )); } } @@ -1127,7 +1131,12 @@ fn apply_word_spacing(chunk: &TextChunk, clusters: &mut [GlyphCluster]) { } } -fn form_glyph_clusters(glyphs: &[Glyph], text: &str, font_size: f32) -> GlyphCluster { +fn form_glyph_clusters( + glyphs: &[Glyph], + text: &str, + font_size: f32, + variations: &[crate::FontVariation], +) -> GlyphCluster { debug_assert!(!glyphs.is_empty()); let mut width = 0.0; @@ -1157,6 +1166,7 @@ fn form_glyph_clusters(glyphs: &[Glyph], text: &str, font_size: f32) -> GlyphClu font: glyph.font.id, text: glyph.text.clone(), id: glyph.id, + variations: variations.to_vec(), }); x += glyph.width as f32; @@ -1281,10 +1291,11 @@ pub(crate) fn shape_text( font: Arc, small_caps: bool, apply_kerning: bool, + variations: &[crate::FontVariation], resolver: &FontResolver, fontdb: &mut Arc, ) -> Vec { - let mut glyphs = shape_text_with_font(text, font.clone(), small_caps, apply_kerning, fontdb) + let mut glyphs = shape_text_with_font(text, font.clone(), small_caps, apply_kerning, variations, fontdb) .unwrap_or_default(); // Remember all fonts used for shaping. @@ -1314,6 +1325,7 @@ pub(crate) fn shape_text( fallback_font.clone(), small_caps, apply_kerning, + variations, fontdb, ) .unwrap_or_default(); @@ -1371,10 +1383,27 @@ fn shape_text_with_font( font: Arc, small_caps: bool, apply_kerning: bool, + variations: &[crate::FontVariation], fontdb: &fontdb::Database, ) -> Option> { fontdb.with_face_data(font.id, |font_data, face_index| -> Option> { - let rb_font = rustybuzz::Face::from_slice(font_data, face_index)?; + let mut rb_font = rustybuzz::Face::from_slice(font_data, face_index)?; + + // Apply font variations for variable fonts + if !variations.is_empty() { + log::debug!("Applying {} font variations for shaping", variations.len()); + for v in variations { + log::debug!(" Setting variation {:?} = {}", std::str::from_utf8(&v.tag).unwrap_or("????"), v.value); + } + let variations: Vec<_> = variations + .iter() + .map(|v| rustybuzz::Variation { + tag: Tag::from_bytes(&v.tag), + value: v.value, + }) + .collect(); + rb_font.set_variations(&variations); + } let bidi_info = unicode_bidi::BidiInfo::new(text, Some(unicode_bidi::Level::ltr())); let paragraph = &bidi_info.paragraphs[0]; diff --git a/crates/usvg/src/tree/text.rs b/crates/usvg/src/tree/text.rs index 10898bb3c..4ca63f000 100644 --- a/crates/usvg/src/tree/text.rs +++ b/crates/usvg/src/tree/text.rs @@ -66,6 +66,39 @@ impl From for fontdb::Stretch { } } +/// A font variation axis setting. +/// +/// Used for variable fonts to specify axis values like weight, width, etc. +#[derive(Clone, Copy, Debug)] +pub struct FontVariation { + /// The 4-byte axis tag (e.g., b"wght" for weight). + pub tag: [u8; 4], + /// The axis value. + pub value: f32, +} + +impl FontVariation { + /// Creates a new font variation. + pub fn new(tag: [u8; 4], value: f32) -> Self { + Self { tag, value } + } +} + +impl PartialEq for FontVariation { + fn eq(&self, other: &Self) -> bool { + self.tag == other.tag && self.value.to_bits() == other.value.to_bits() + } +} + +impl Eq for FontVariation {} + +impl std::hash::Hash for FontVariation { + fn hash(&self, state: &mut H) { + self.tag.hash(state); + self.value.to_bits().hash(state); + } +} + /// A font style property. #[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] pub enum FontStyle { @@ -113,6 +146,7 @@ pub struct Font { pub(crate) style: FontStyle, pub(crate) stretch: FontStretch, pub(crate) weight: u16, + pub(crate) variations: Vec, } impl Font { @@ -137,6 +171,11 @@ impl Font { pub fn weight(&self) -> u16 { self.weight } + + /// Font variation settings for variable fonts. + pub fn variations(&self) -> &[FontVariation] { + &self.variations + } } /// A dominant baseline property. From c6cb89997be406c5c9d28340f8ab7ca0de134775 Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Tue, 30 Dec 2025 22:38:18 +0100 Subject: [PATCH 02/10] fixed formatting --- crates/usvg/src/parser/text.rs | 5 ++++- crates/usvg/src/text/flatten.rs | 7 +++++-- crates/usvg/src/text/layout.rs | 17 ++++++++++++++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/crates/usvg/src/parser/text.rs b/crates/usvg/src/parser/text.rs index c80b9929b..890e8fb1c 100644 --- a/crates/usvg/src/parser/text.rs +++ b/crates/usvg/src/parser/text.rs @@ -524,7 +524,10 @@ fn parse_font_variation_settings(node: SvgNode) -> Vec { // Tag must be exactly 4 characters if tag_str.len() != 4 { - log::warn!("Invalid font-variation-settings tag: '{}' (must be 4 characters)", tag_str); + log::warn!( + "Invalid font-variation-settings tag: '{}' (must be 4 characters)", + tag_str + ); continue; } diff --git a/crates/usvg/src/text/flatten.rs b/crates/usvg/src/text/flatten.rs index fc334cf3c..7ca155bbe 100644 --- a/crates/usvg/src/text/flatten.rs +++ b/crates/usvg/src/text/flatten.rs @@ -134,10 +134,13 @@ pub(crate) fn flatten(text: &mut Text, cache: &mut Cache) -> Option<(Group, NonZ let outline = if glyph.variations.is_empty() { cache.fontdb_outline(glyph.font, glyph.id) } else { - cache.fontdb.outline_with_variations(glyph.font, glyph.id, &glyph.variations) + cache + .fontdb + .outline_with_variations(glyph.font, glyph.id, &glyph.variations) }; - if let Some(outline) = outline.and_then(|p| p.transform(glyph.outline_transform())) { + if let Some(outline) = outline.and_then(|p| p.transform(glyph.outline_transform())) + { span_builder.push_path(&outline); } } diff --git a/crates/usvg/src/text/layout.rs b/crates/usvg/src/text/layout.rs index ba15ee1ca..cacb5d209 100644 --- a/crates/usvg/src/text/layout.rs +++ b/crates/usvg/src/text/layout.rs @@ -1295,8 +1295,15 @@ pub(crate) fn shape_text( resolver: &FontResolver, fontdb: &mut Arc, ) -> Vec { - let mut glyphs = shape_text_with_font(text, font.clone(), small_caps, apply_kerning, variations, fontdb) - .unwrap_or_default(); + let mut glyphs = shape_text_with_font( + text, + font.clone(), + small_caps, + apply_kerning, + variations, + fontdb, + ) + .unwrap_or_default(); // Remember all fonts used for shaping. let mut used_fonts = vec![font.id]; @@ -1393,7 +1400,11 @@ fn shape_text_with_font( if !variations.is_empty() { log::debug!("Applying {} font variations for shaping", variations.len()); for v in variations { - log::debug!(" Setting variation {:?} = {}", std::str::from_utf8(&v.tag).unwrap_or("????"), v.value); + log::debug!( + " Setting variation {:?} = {}", + std::str::from_utf8(&v.tag).unwrap_or("????"), + v.value + ); } let variations: Vec<_> = variations .iter() From 10502835bde5cfe80f32dd03f6e6915cd5c46911 Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Tue, 30 Dec 2025 22:41:58 +0100 Subject: [PATCH 03/10] allow wdth --- _typos.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 _typos.toml diff --git a/_typos.toml b/_typos.toml new file mode 100644 index 000000000..9440073a9 --- /dev/null +++ b/_typos.toml @@ -0,0 +1,3 @@ +[default.extend-words] +# Don't correct the wdth axis name +wdth = "wdth" From 3b7b6a618bc5970f13e23871b594303ccb1c9db7 Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Tue, 6 Jan 2026 09:05:40 +0100 Subject: [PATCH 04/10] modify the proper typos file --- .typos.toml | 1 + _typos.toml | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 _typos.toml diff --git a/.typos.toml b/.typos.toml index 389e359e0..b2722fd4c 100644 --- a/.typos.toml +++ b/.typos.toml @@ -13,6 +13,7 @@ flate2 = "flate2" Hel = "Hel" PNGs = "PNGs" SVGinOT = "SVGinOT" +wdth = "wdth" # Match Inside a Word - Case Insensitive [default.extend-words] diff --git a/_typos.toml b/_typos.toml deleted file mode 100644 index 9440073a9..000000000 --- a/_typos.toml +++ /dev/null @@ -1,3 +0,0 @@ -[default.extend-words] -# Don't correct the wdth axis name -wdth = "wdth" From b2d4cbbab9ab7ce3ca2b0800cfd623b937d273e9 Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Tue, 6 Jan 2026 09:32:46 +0100 Subject: [PATCH 05/10] fix typo config --- .typos.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.typos.toml b/.typos.toml index b2722fd4c..418faf839 100644 --- a/.typos.toml +++ b/.typos.toml @@ -13,10 +13,10 @@ flate2 = "flate2" Hel = "Hel" PNGs = "PNGs" SVGinOT = "SVGinOT" -wdth = "wdth" # Match Inside a Word - Case Insensitive [default.extend-words] +wdth = "wdth" [files] # Include .github, .cargo, etc. From 3d47ff4120466b7f4245c53106c4382960800f5e Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Wed, 7 Jan 2026 09:17:59 +0100 Subject: [PATCH 06/10] Add variable font tests using Roboto Flex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added 14 tests for font-variation-settings using a subsetted Roboto Flex variable font (OFL 1.1 licensed). The font preserves all 13 variation axes including wght, wdth, slnt, opsz, GRAD, and parametric axes. Tests cover: - Explicit font-variation-settings (wght, wdth, slnt, opsz, GRAD, XTRA) - Multiple axes combined - Auto-mapping from font-weight/stretch/style to variation axes - Priority behavior (explicit settings override auto-mapping) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- Cargo.lock | 1 + crates/resvg/tests/fonts/README.md | 7 +- .../tests/fonts/RobotoFlex-LICENSE-OFL.txt | 93 ++++++++++++++++++ .../resvg/tests/fonts/RobotoFlex.subset.ttf | Bin 0 -> 377180 bytes crates/resvg/tests/integration/render.rs | 14 +++ .../all-axes-combined.png | Bin 0 -> 9904 bytes .../all-axes-combined.svg | 10 ++ .../auto-font-stretch-condensed.png | Bin 0 -> 11297 bytes .../auto-font-stretch-condensed.svg | 9 ++ .../auto-font-style-oblique.png | Bin 0 -> 9990 bytes .../auto-font-style-oblique.svg | 9 ++ .../auto-font-weight-700.png | Bin 0 -> 9609 bytes .../auto-font-weight-700.svg | 9 ++ .../explicit-overrides-auto.png | Bin 0 -> 9259 bytes .../explicit-overrides-auto.svg | 10 ++ .../font-variation-settings/grad-negative.png | Bin 0 -> 10334 bytes .../font-variation-settings/grad-negative.svg | 10 ++ .../font-variation-settings/multiple-axes.png | Bin 0 -> 9556 bytes .../font-variation-settings/multiple-axes.svg | 10 ++ .../text/font-variation-settings/opsz-144.png | Bin 0 -> 11034 bytes .../text/font-variation-settings/opsz-144.svg | 10 ++ .../font-variation-settings/slnt-negative.png | Bin 0 -> 9990 bytes .../font-variation-settings/slnt-negative.svg | 10 ++ .../text/font-variation-settings/wdth-151.png | Bin 0 -> 10523 bytes .../text/font-variation-settings/wdth-151.svg | 10 ++ .../text/font-variation-settings/wdth-25.png | Bin 0 -> 11055 bytes .../text/font-variation-settings/wdth-25.svg | 10 ++ .../text/font-variation-settings/wght-100.png | Bin 0 -> 9259 bytes .../text/font-variation-settings/wght-100.svg | 10 ++ .../text/font-variation-settings/wght-700.png | Bin 0 -> 9609 bytes .../text/font-variation-settings/wght-700.svg | 10 ++ .../font-variation-settings/xtra-extreme.png | Bin 0 -> 10424 bytes .../font-variation-settings/xtra-extreme.svg | 10 ++ 33 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 crates/resvg/tests/fonts/RobotoFlex-LICENSE-OFL.txt create mode 100644 crates/resvg/tests/fonts/RobotoFlex.subset.ttf create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/all-axes-combined.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/all-axes-combined.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/auto-font-stretch-condensed.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/auto-font-stretch-condensed.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/auto-font-style-oblique.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/auto-font-style-oblique.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/auto-font-weight-700.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/auto-font-weight-700.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/explicit-overrides-auto.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/explicit-overrides-auto.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/grad-negative.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/grad-negative.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/multiple-axes.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/multiple-axes.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/opsz-144.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/opsz-144.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/slnt-negative.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/slnt-negative.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wdth-151.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wdth-151.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wdth-25.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wdth-25.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wght-100.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wght-100.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wght-700.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/wght-700.svg create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.png create mode 100644 crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.svg diff --git a/Cargo.lock b/Cargo.lock index 6dcbc486d..70c4e4165 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -679,6 +679,7 @@ dependencies = [ "strict-num", "svgtypes", "tiny-skia-path", + "ttf-parser", "unicode-bidi", "unicode-script", "unicode-vo", diff --git a/crates/resvg/tests/fonts/README.md b/crates/resvg/tests/fonts/README.md index 7108843b6..18d6d1515 100644 --- a/crates/resvg/tests/fonts/README.md +++ b/crates/resvg/tests/fonts/README.md @@ -14,4 +14,9 @@ Noto COLOR Emoji (COLRv1) 3. Run `fonttools ttx NotoColorEmojiCOLR.subset.ttf` 4. Go to the section and rename all instances of "Noto Color Emoji" to "Noto Color Emoji COLR" (so that we can distinguish them from CBDT in tests). -5. Run `fonttools ttx -f NotoColorEmojiCOLR.subset.ttx` \ No newline at end of file +5. Run `fonttools ttx -f NotoColorEmojiCOLR.subset.ttx` + +Roboto Flex (Variable Font) +1. Download: https://github.com/googlefonts/roboto-flex/raw/main/fonts/RobotoFlex%5BGRAD%2CXOPQ%2CXTRA%2CYOPQ%2CYTAS%2CYTDE%2CYTFI%2CYTLC%2CYTUC%2Copsz%2Cslnt%2Cwdth%2Cwght%5D.ttf +2. Run `pyftsubset RobotoFlex*.ttf --unicodes="U+0020-007E" --layout-features='*' --drop-tables= --output-file=RobotoFlex.subset.ttf` +3. Copy OFL license from https://github.com/googlefonts/roboto-flex/blob/main/OFL.txt diff --git a/crates/resvg/tests/fonts/RobotoFlex-LICENSE-OFL.txt b/crates/resvg/tests/fonts/RobotoFlex-LICENSE-OFL.txt new file mode 100644 index 000000000..5530c5720 --- /dev/null +++ b/crates/resvg/tests/fonts/RobotoFlex-LICENSE-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Roboto Flex Project Authors (https://github.com/googlefonts/roboto-flex) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/crates/resvg/tests/fonts/RobotoFlex.subset.ttf b/crates/resvg/tests/fonts/RobotoFlex.subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fc9440d2e4d4dac5461e24417e00fdb66d299695 GIT binary patch literal 377180 zcmd3P3w%>W+V{-KrR`~(-cGMT?1f82Kum!mMCE2gtr8Vbvn--SMOPyWsMQ5_-!5Xs zdRdmYqExmb+eJjJZb8fnq6RIf5ej02f)J4+gwhrWrD@Lj{xc^@Tgoc?x!>>iO*$u& z=gjq)=Q=azlu$xQ8ZKHg^tuVxT32n%s3pYgCuBjje9i9PDt4nLayF>-EC9G zeSbi?l910U2@#e|oI3W_+k5T1k&x{sLQEYu;rDYBw%$a@slJ5dTsi5s%gu9-I-IC) zBwCqq+vKs6n~u%cPH5r`{GNaJV|UM)HhA!Z_}zftpUr&u?%5=P>_q~;dkFz56>$(d*;#-LWT|{gdTqAk(qa&s}xYz~yxLq1cMhI7j;c-aM3#UagOo-GIkMw~sJb?_=q=wUp zBvvynoHh_ib3-_tL`2Q>a5}kj>@1>jvIUP>tkOXZ)INginXtToU-o&UihtqvXhSnBN8%eJA zzHs^ylBHc7PUn(*?MgD9JVIuZC&(P~0J)#cBJ(iwW-^pqL5h%?49LCsz7@IdL7az} zORVG}KueIaq1+?nLHwG@OO7Rv;(HcgbI4rWH}M+hp@q3*6uBIq`_T@|@hIvWf>Mu= zhXI|89?V89HzUp?kMr`s1H5aygQM+U+6~^>pIcG-e$@OBxf|_Yhgu%NZ`RjQ=auN5 zb5wN1UEAxdmyN$`%~SDZV(=mYp>7`u&+%Zap&kMC|^j$w<<+)UKN=8C0$$LnP9N07evXLGaO z-^T0sxx9=<9>qxKp|&|FaXZ>k`*h)+Ou-1*Y|i0hoQqU0nTTs-bQdmFj8-21k4ufk zJj_HXC&w1+-7mK^0r}4_#b9h+X8jv{S$Xdt#hA_?jf!_CxfUG3uzoiwj*hf5brZ@t z0Dly-b{o+2Rsvs-;z>bOCwaU3l$!B%$r5Bkwjkd5{GH#KIELI1Xwx} zsP>LYwp&Oq{GNgM4kD$xI~k0XorL%_hw1N_eCt>`9=CVHqWBGm#oRf0%6K6ezv~d0 zCZ{y^&dJ5&q34JoAdcd&xH~70y-j!qznjqKsT?NWIeEgh^4EkY!x2|8$TNd3z6>`NTYweKdgP$9_nZHvGUN_YB}8F;bO}rspaUP|F9hJ z!1~GNg@=o6FC|5kE}9?ZIL*%h{O9N;D_pJ%yq0LVRgUp0Yp)Bv zTvWNJ-4`n1Bd0@oOeWekf0S0{aP_Z3#_6^Jxe3-T0*L-U!i3?+3a zOOShbK|1BvxfMyZ^jTaqpV52D%H);o%6zvmieLARZa?hS7`463LRyf9Nb`p0r6GD> zr0ZY2mR*7$=&ox2v`}YhcT2jK_9R_P@ckw9Ip$lWD^oS!>&@g+*p-lXX_B_k+!uWw z(7*riVIvC78R_YT>JZYUjLeLTbV*;3-+%b<0$MnHKuSSjVM;-IW;#tcu%BwSe(Qbq z>E~Z~@!jAzyPMzN*YKB>e_i(Xcj@0M3}uG03Ikp6&mB8nUv*HNEC%kP`=Th)*U4M$-_`)1BgR7j(Le84{Q5| zCP01J6ukAav_JwtJ>bv0H3a6%BO$JBR3tw7)DLT;g=Dy2D|qDk-gT zl{+?f zcyemda6L&$hnikKfB*jZU&=MqCKuNh(?{v(EP6e?zqodWe1%*h%FoETsG%=v7^BvZ zHiDo6G9W!86%`0EeZNG}nlD*3a`6m$kUlQbGWzw5+G6=-`TZ<;tNd&+Y8WM4u8~m# zxIRrsGt<(FXukovw1TvLqv%s|+bdsu@rv9=pBgPM?Z3Idyi}WahrDMty+d9zn-09A zb|rmIo(lylkSocDn$NXmoc0K#H3~YoQuBPr9Qtr=tuSeIXq)CswC9xf)5WBLz*o-9 z#GHVtCB5^3Ni%AP?Y(~dMrTEZeKF8MZWMBbKMKre=C$1@3=4fJRVMfgY{b2Ohsra-Rpp`^spQK5t zh33@ZDZ_+Md*SS_OEP!2ypmoUULWZj_aT3m2 zoX0?x)T!AL8bV*1TXm*xyL@u<-%CoKesET(t(v~|#L?%g{0gZP#qyQQ9FDcl&<@mU z!tHsb2-gme55P#hoNJ@xKs`-ezHpwib+fzGRW{FATCwDTxfSoN zT(qdlMd#NZIkN59&AD3hM#oyOuSyi1k3CjWviOzf%gYxnDiP7P86%nuOoNWtm}xqO zRltZKUD#c_E;Ln}uaKK$J^fdLuBM~!!j-}^p=*bsoCAH%ML9@V#B|(AHzsU z0|M#VO-JBhJ(c9ZX4_)(AmNTs!VQZoOYEi9)upAC8|lMq57D?IM<^X)q_3*O6YwV{C~%gqf{Z@*ntRpX^vGo4N+td!02BD8ojFwz?% z<5WP0=cVV-{%*nCVbyn;D)9UJI z%JZ|QK6$pb_S_$)&VJ#;S4&G*tSBvgb>P!Z=TlEPoln!!&-U*9tn`Dy+RNT9+3?-I z+LE^~(+>Wiq@<#vq-5DLO`h|)=bX+LUSL?7h&~SrV@c(S0+mL1qf9X6fpUN!V5%UW zOg!^>7yQT{%15PiI-jnP>+9>~Ce1Og9H63i#T##|Sn;M;?l8-nOcL+L>(L`VH^bZ#YfYRD|9ZZtd{w{~{FnSbhpd733XVp!r<$ zZl}B(4ua+Kj?26SZ}{FoT@RwJO0}*cikft~2Q}snk8o?~?fvu*FVa7tMpm0eIi`6K z5+fd3m-Op0a_H2^d_zmA;-OQOQEoi2;m92y%yl{+nsw`pF|JFeOkB2S^X7&qlGaOi z&6?wIl-)A@#RZ~h{o_qzb}U}&asQpQJVzcE^Cf27Os)X|@Ro}*7$2r!t})TLnnyq@ z=^0n3APJ1qzbLJsKg<}CHVmROBU6J6`Td3a|6Xn@H=Ev`R|h^#mS@YeLmLDGomIZs zI_{HldAB^9eu=4{OiOCYZIiP~?B)vlX8F6#8=o`TjE-Kvx7w!A7i$|FHk*UaqWNH_ zBcWCDG<sWDD`K z7A>l1s4HKWtIe$_sdKeA31WFk$@4-r^*rWu&IhH;g)9hS9$=wDJ^}MZMFp5~=p$wp zM6518C3ESWuvN4)Riay{p=MoeMlPd9D2Fl^?Multnn4Zk zKP!scXdk&ut^tPF$Qm)SI0BEYkj*m_eHancV0tCha`=SYTQ}KE`AQtILYIppTg@O9{udn#xdL;jz#Xp}xbpQV>?s-7CYn zhw_#QEX7FPEyB#utHNg;PYQotNn2Pxh7TF|0Nxos%zcYeAVE{k!^nXCgwZ9#Nd9JO zm=J294^FId);BhO^oDB-gmdFr`D6qoC01eNN_m}mh>8?K`)+WE@wGILBSr0-E;c+8 z^eqK?4A+9STZ98!wuJJx2vwmOx|-1Q!W=g4cW`+GxnWx{oA;e9Tkr$$Y{jQ}7fH}w zSoWZrh^Ea}zWPep^1^}zFKhwv9XV64jR~GBf2pigRA)t}M@eSAvpQk8Lz5QLn6+Cp zvyX;KaP^0#&8Md|ABKhrU$)ycPjXv{%>dIhy6_AXtkuj3-MnR`E;T$qdZw8f1sA5k zjt}z!;|horHcG13$AFy&(1Nua1Z}K7D}k=8rYjS&^s!pO)h62#(qm&|(-UM{n>NRI zqY;0>Bb_N-P4ENbSR?+l*M(cuiD(fLy=#jM4H=o?c0Qyu#*i-wf2~6*HlaWYJzS?b zii)!>#ttoPge*0!>0nX{)Sw#+YEZ2;&L5m&G549AJ-E#aW?__Iz~@f+A95=`|M;YF z^X5ht!)#GPZPTcYmasXWHjRP^grlTCSla;B_;pBG6wpqkM=jp(HHJ9Euu01zSo*Rl*+FzxR}0& zrj^pP1!1Y>3XedY0Z4G>uyu|>r74gu(cy{t4=aI}7u##&$s5Yx#Fa5scpxBO&6N?crAa)J!9XtzQ) zY|kq+8VmEZBUov(643il8r-GprfHxN!#ow?E=>Vl?xNXoi4Zc0aWvaS@7vrI8>@}e z#>B~upU5q7FMCHh ztKX)0`O6~E?~b`;51{Vmu`BVajY77hnrK+M94>GbB(@rxPpg{sSC zudgWmdp}L4p*B_8xq0*VAKYJ3a!-?6cD-1>_dTa`79CNw)-l#(%T69NcPu?vyWw98 zbh@!KAHQqjdlmKvUz)P~KD56Ks~uNiaH%Ah%|A17m=imkIkEbfl!CMr)q7H#T(%}w zZ~D8luDQ9+xnhXRbxFB{87GeNXU0yWgO21Lp@Sxk6=noS(sfqn-m2WHy-wg}3UpZ` z#>ixt1g|OVuk-aD)h-RM1(EbARP#gq-rC1Xm%sSp^3um@_tyU)hp5~n*Z)wi(@iNo z^m^{=hf1gDbmc$D^-bvi6yQ&e^q+g+P)M0f=Q6`mNY7L)-%PIa`%gi?|8CO9u5k@n zfl+K`UB846g33qa-P6WCqbH%Nv6JN8M{-%`t@31ygUv4+Lvz zM;aT0?o7o_bIITr9jjhhy6nl)&{EB%N5B164)TGN-guYg4nB^mIa$k!n`w?Z5^$nW zt(PEwRCyb&IkSijM4zq!RTUJtUH8~?%o(C_T<+@4ZwlATdxo@VwrA{cIP}_z*w_tk z%LkrkSdoi0vUVsj60G^Au_^64Jf(n15{8p>=9G;nQm1r4S~m>MFK#HUr}}R5T=}%4 zYEXVBuH?hxrurMSv6ys*C?Iaq*jeSTOez$f?}9W+mO+UfWsJi$xJpM5znrQ;TFYGh z%kG@@d)KDF-nVX~OE_9Qb)|VN2d#$<=&dQb|O^$ ziP26aE>lr1Y~xkBT=)Sv>eJgXOMScJ=R8F5NrM&`z!3I7Q)fODzHVGSt7@Fy^vZ*G z|7|2FI*Pw8c$_?a`sB&iVS6k*7idfB-j+HSYTfE&{LS(AE4x;Q>9}p;)11?M+Tq}U z@LCsN{ouhkAFBLX0P7aGprx-hj#i zS1`LZ!WKP61w>qg5zZGClg5S)>pl!~!1+`!tOTB5Hp6b^lbH!=&crFlvvHw4XOJWg z&9Ij;NhBP$PSR+?sYmJ_@JS- z_S?F(Yw!D`)47Jgfo|>>+Ot4tBy=6Bx zQz%&iX?#H2n^9S~4pkPbqB5mm$)+%Qg;}3I%Bf4+JCwz^Utp^p2%5K1N5qnfm_Qo( z;`8*ynhrynRcz~&AOAwHUHf5te5^h;(crKAF)@*);y+=H2y09>6aGSXpt)j`*@Qo#wlf6` zV!WEoXg5ZcRNQ!qT2WFxy(*s0ub01#mlx6bvGl5MG&a;ZI{sB6zD7V)4o2bg+}Vz(P&Yi2egcj2JMW|A@lj`9fx9hQ1)(oPkY`RAJ?^XZx6?iTB(yQ8M>= zc9~DvYBIKQBN-8y+jOclFhL=WbxJxDXBhFfMG5yCBJWMWN|b;Q`MNniKw$aOR;+9u8F z)*ZAmSkP(eHN}i_KrU<%itCFo?PIqJ%O^2|FJClv(r>RBJ>`b6^Dn=A!Ppz7jJ{^t zq_K-G7bMI0ftMHuj4J%XGGT!6lFKN)vJiVr@4(ai8dhU}G7#h(LoO45N5B_je(!-s z>rZar@EiFaDW&DwdSM>&!(&%h&(y6kS{_kKy0H;8q$rWxf*z;3P(c2N@{O=bcaU3{ z18AnOX+g*R3v|!i-d=n=+GG~K47;K~&S&HyFo%No)ip%Yw%CL5XUdIn6i+;@x z;&AL(VpHh9xr3Oh4eZ4ZBDj6LutwOS^F}lw7t-Oq%&-oDiN!c|e05dTKmJiwRlRzm z-G2S`cKbwaLY3QHHH%+n+2_r(vkS+bTpXKv0qot)u!lDPU+y$9%k%nfJ5BVN?mJD8 zN1DCx-0}T0J54#*Y3fh^#&(+O*(F zdFOw+)1;ijh)#mzF0j+|2zHw0YdY9Y(;)i4=j}9&LZ1UDm&-I9RtbJ?r)d<`qMQFW zTTSXN+%Vv#0PS4FPLu6d?=&gcLeSigkwF+^9e{b?-?*u#qe57XjV73||CODlRO~dR zvYn>3+S;}!r_O%DdXu(lnfV%) zFgf9|gk=dk5>6);Bwm^LaN?7RZzXyY4<|MoVhl+JqhX+7gkhZFR>M68r{PJ%=Z2Of znsj;6n55q&y^*vv>0Giod3Y%ojQnV8%H?+@S+`= zxmq9Yxrtr7oMh=HlNG3s#7OANXDIh2Nzzu6u^7jTtk3wiX_o@d+9g;Yx)tS?l4aO+ zoPzHu+A(Ab`kKwtbI3B_XfZvltkPjWg{M(xT=du_DhH!A9!wZA9CH^$(JFa6WS}`cTdyohttW z*=qabRg_8Bq>=Hl%aI3o$HG^(rU7T-dyy2)DdiMAxKY~K#HN{}ggD-36APn_n1|#9 zLc}|;nEtXToyRkbo3z>|FxQv{-7C66u-GN)w`M1~kC954T#!QO#&Oq8nsgo6LUPGM zwT-w}fwyoTzL!C8kD-}W!FW@`mDL~tnu~8OKJ52G*e}SdD9R!JTg?rSay@%S;{t)A zCU|(!kdHP5tm2JE`EleoxT0RV1}B_J0@xt|Yaj`u5pP1g8}W6-w-7%<1g#_l@gxe2 zi^O~!otuYj6=7UOE<#2QL#zOUjzN4D5p|Ec2eFlq(P(e9mk{U<5#rOC^Wq(aS&o6tS`Y*nB=hsFsD`PIc_yuxy?N8VA1+rcQsCx~+wr^cW*S+S8 z=*k7MbnQ>q^aZm1EJ!Vz`ztZ8HldEI>*%_sf3_PJxY@Hd@+&AL(vwbHMIaYw`WHcw zvYoa4n!c%JBXzRIyQY7!Gd(h}UUjdbYd?Er{{?_rwzG!rHUC249=Ff0jr@u^Rm=A5 zPftjXZd?%1vu`ZhudA(VL#+N^Q(M=vYPu_=YfHbB?%9)`kYB2!^ZxmG`}KVz-KgSM z^o{u)l%)Cu3(4il?DyPXdc6A@e20JZpJ-}nJry|HcCJ0xA#1ccQOYnD;Mfo=lH>JB zMw8iUvpbn{Lw7Vd#DZwWt* z9+bNluw*xV2Kum8u8(jn#t_>>uQ0XSxbJR#!pL`e}S>x?60u zxTSWB+xQ)#&*U~z#AMNJv{*bz2D2yI7w}{^<6FeH*}TJ`OZAFg$t!I)d8HkQ2M~Wm z6n$PP0pDqeCX?4(Z}nP_IekfA*nCO5jlLu=qOTIM+LshUS~U7aQSyrkh>3`XMnrrk zA!6{NBn5Opjm~EZ=ztuZ4p9`(>OPG-tNS`m41O+&!QF^Q0%EYqBnE-OU_e9!EMP=5 ziP-@o(C$U_BZ`P-M295#ZN?U#57CV1Fb?+FF*j~RFQO08glIKcyjF|P?PfbWz$l+I zk`oZm88snvB@i&Coc!J-`S;0_vf zNfwVTJLoZcFsA*Y2LpY>$gVLGyGmwHQg+KR(UY3p^tr^YJ6H!quZdm#0e) zAl4&giKhbxjv50=qTj@Ez}E6&frCU~A(Ld0Y@ZRq=Q|Hx&1S0$#{i60tI8c+bMn@~ zDLywQ-Wal&yll2jlF{s`+~pZ;&T=>^5gZ7ppQ1Nv=`O7(3oUMsTW7Y|2z+LU6E?Q4 z{XoxMRR@frl%1zQ zVxpQVK*|D`7)U}i^HercCJ~oF3#%fjr6t&ssY}u&A*E?K7fK2xrJO`)OG!z&JmsY3 zl41le`uzb(@_HjF z3B^^IGD4iGDU+JQUbU$NFrU|NG%;a^RKRHJDGs{%rI2qsEPzYIVKkavio>Z@bOvLfCI*!R2wef>tYI zMx=B|mDp+!yfzkC${$SyY&I){d1@rH&1|z*BkZyxaAx!{ZsaL{G!+P^YAQW8hYfdY zYASs;ho!_(>8h;!$lu8)rQd1$NaXz32uY;4784L@O#WL2+ zlH1%;k)_D2Jji4~lG!rYq)cU9YjHSkF)Oz`@Y4F1df)iK$SGVbh}{|wi$1azMB()Y zKs=hijRCaZ~5*lMb4 zY6@(&7*fSY7-U1#01a$lDjGV)Shn&YsbE7(0xc;ENhwR~ES6i9nPd?wo@TRM3Z&@q ziRD7O7mh1jLMoI8*$1x~sKA{_-Ps(;(b^Tfq5!8|IM%iWgPpE&1AE$ zrt7c6>@fh{Rbutd*WH1X%5h&G!1ewNmD8V@49F-L%q>%-sO-prW z4p+FBb%^)IKFP>qhTC>$@R&Cq0)G6Pt1} zp;bHVP}`9)iQiJzCyX7V4=N#1XisIs$KVC!jE-soG){~H0$Qp$OXK3BfJ6p3*2IUVfR+j9ckiR*f1iE!caP%DP3*jF*U8d{CtZZut#*lZC>u16U>nb+kj=Jf$um75 zHB6j==|(ewhOl+Hi-|Ocf)X^!b~3NKHyrL(7j% z%t$zSGQ|KpfrZw_lc#t{j89af@^N=7Ws3FjFni(xHNMd1`u+Y{D)0>4rn|db@ zYY68)9Z*Z37E=?{CQi1hZJsn_r>Na%YEk>ul+-I#?W+Hz+IN47(bWUu?g8P(28@i( zQc?yF$4(qmLt0)&CJ#TI_(=_E`I%Wf9Q7YngH({!i-#Y7`cVy;re1w`_~GaeYRI~* zk2(duMit+_>_L@1Af6r&Zur7%=_~~!hJ`K=m_O%1jCnkKfB1Vf^u8ibB@*uel}5bz z7Sm83c6fKF!F1hFm9#v2R9f>4yusB2BKCk7dq7}qu;BhmrE7Pg-QNQO1<68}JeF&C z`1p&D)i8YeHDh`BXxm3>D7t&B%6m1NRL-jz{}?O*7P>%~3Ok>pRUs~hxj8CeWUU}* zJ2V}XCbr4+T(Z{J2}$M<+6GCAJP>zEQoBq$4Du;1gU^>3v5+|tX%VfTYBd_2f(Q8I zm~$Z-G6?M#DBD%RL`rs*;BoCrQZQaa`MK-!B-Mq=LWp<7VeKLi)3*1L6T$SB{;|oI zhV&Xu%sE}VA^mhHcqT`8Vn75^aLMUV^O>BE{b_9Mx}dgWiQ%klX-kV4P!fT>nRHgp zYD?9Ae^UhVR?1m9vn@^gSug@=plxy*yoQdr#WNT7~VhoDG)F`A7c}_z+e-Za@ z>7i4$hrPV0)&$NO%5|AhNLY_1WKnEOL)p_1l$-91LgQ3ZAqlE0hxFmbLd0J5Kp!Tz9)=cj|2VGp%!L(_2y+F+AA9;=TVQc z5JpQWt_#UW*m%VY=9C&`2F@tgC^eQEnBZ=Ur4v$8QHD=Fcl$9^{`FJjX4)Nd-? zWvhG-9pmIY?c1|qsVYvRs=x$Y5S1ilT$Y&fEg}>q7S*66f4-S?7$y%fcNq@zWNwf< z9P28TCz<(PU2QLB7Cb_2HCe2ts%zC-)x{zyo5sWHf38-;P1DF~Cl5>#t~wsiFmGDouT-Vc*divKri~rD?QcJ> zzNi{iEayaZ#phgEBxRa9Md(sK1^$6IFe4a;&3+M~uuDizbly}^4BG$;2rP6p7i>L2 z&YlK?v!^v+?EyM&I*%+s74{y=RqCmMC0h?wb-;H43jH_on&gCHG}^ec`gVZL zcHzX(n2^#x=wzU{zc#oRx4-MZ{Nb7X9c(sY+jQ;AvRXTeP8;>gCH9b+gTDT@?emV~ zr;YswzHwRTYKt86SW4ZP*TH@93Hnc05!32diUK;@=BiA{W>qMMlWFC;LwLdZ zZyI(e$AWP~2KBo}8O}jpe7&zuX$;0+QP^&dfPVP4PT3!fA6{5s>2_FL^V#PyISEug0X-RY2W+D~;H6g+zlhKlY? zFh)Otrf|^7IA1Gm)SXUA!`nNCa?p-1x9*}xb!Uc}M_K6=9Q5^)2i z>g3Pd+v?~KnsY-(j~GqI^IV%gsM$jI>rRiqcDywT!h`vK-RUc@onX}@hC13}gRNV4 zw`=1Pe1`PVSAqxPAkI3MJ;Ul28iT7duF^{3#pCl4B&i-+u&WEtH$tLXv5PZr-OrpY zE2&kA*@x7UT5}^4d+c4X>XN}PYdtvh`NM}?UX<-U`elRH8``w<`}jxG6Ngwv6kXll zvw!Q(uRP7JZT{>>Me!yc{`t{A5nli2Ki?ZWH(7!jzSx!^siWGYgqyAYO-stX++}1w zqm%oL{;kWGd(ZO-jbBx}t>?i8epT%;MqzetPPf3ll%lW_4)c9gUFMI3hT%Hzd&o_K7TV0$%)BokWT&7JoY@lQ-b5^ zP`yd`nP%=@`rBGPUezr`H^yo4@3EhgK*L+j~QHIyZ!H*ZYhq2*M|OD!y9CuU;D zfd}}BszJ0r#rV4CJlNnAqlAZ_SU^5EAGrjWI&uc{a+sKcmF;vMjyE0u%W)P4r{-qa zqp(joOiInoF-5)6jocm8rR61O=kRdk*pc!hEDX*V(8nHy)pMAbF(6-x!WuYCmoXqm z?9IdBqlbmVEVN_|lsi4lYCfyR>_K)*R86ZZ2)gV+*;s030Uo5f&X5GVuhVd;;S`oM z@CKuC1P|MHZC|yWg_^;(=?6JwTU}e(J_|z9=vfvc=K$upE#+L11ZU33?I^aq_j7z3 zT^@>JyUg!z^uy=ZHJT>eFmd9IV_n-eeCTr3y|=OO3GF8e-#+bL>xC^0u1Dn@fq8{T z-k|}XES*cv$uQg+fgPhAJ~?nMS;~mXlzZ`fKO)~DIqh6>uS~;j@;DCL{3-RgWZ${u zaaRw!8XAPDb$F1;@F0VRkkWEx1eT^Gw99QlgP{B*_Jkd~0PLiwWb*oseWwJDu=+C7 zl1$3g+)MrRGv(`#Kw#5o<+SZ`ldJG=M`O@mbW{`>rouJXT zYde}0=}aj8Y&Lw^0dg27Fc@X97DevEJ;xu8(w6V#Wo^m1+4ZLtnJY=5fyPrMA*2g- zoJ?jq9*R>rOJilYhB_I`r+mh-_WQFl-su_r)wDV9B&GJ zeEfJIbbLT+?wO{6&?6Mf#%ve%d}=!1SBGR)=3c_Xp(BTQD9RZkI+fxm(X&>))_jZA zqRi;N;sK&JTa|g;frAI$V3Cw@TmnZ|Ig$$PXFVIt_I4@wL z9&T%HY5y+67DodmfgJ)*Z-#VWOMV$Q%UhDSxHGTQgZO@A^Ak0BUOx-T0?Os zX(%-Kz!~>X*QTta@jRS4d*-V%XO5paBgG|)@qws(+;HmDxl^YM@oDYn($8Zt2rr%1 z5(PpUg70(ywwt5CY7Ptnc*Gc8DcgPY=!v68MX4b8wG>74Uk)Am>d+xm&Jc;>nNAke z^(kzzR_0s$u8mQgR(d>;FuRy|@v2Lr+v>Nywr!hd+qS@vTd93^2jtaP zJFhUAhh8!C(n9lh?+SDe^_tlvoAN!_;q`d1qH4FBY&d^`AfiDrGe`H~OAzM$; z1~narDV5q}Jl7%9gZ)u6d#p9?f*y8v0%4?_bH4v96_@xG{rUcK;I~eRd+zBM#U%XL zfwCZ~rj8#!a{Rb1HCNYaR;EW4)v;qg9y=zc<>~s(Rc?&V^r1ryhYkgEhUkhN*b3u; zFa2TJVq2kIve>(EMYYSdZS*Y3I`)E4yK|*X_0~4)AEaySpa9Bu4tlct z`AnpaWbSJ`+-189VeVab>1zBh8cAuvl~BaHAu>WSeo(>*$`s$0F=1V{Pz-<0tb75fbx<^W`D%pX(Uq<7WQCAEdewA7G-MfLa+t2QH z*Vpg-W^g~tm4gRge$9}6`~P|R)K2Bw!Ta_d*gc@{F8=`2k6-s|^nQDrEoVwp*kaQe z!nTnKTgmD*s%+we2=@6*NeA3kt7toT>`3GBeSP|582j`YmXu8!PQ}oj)W=OqV|Ku6 zG~(n7j7L1MZT+$1)EVVF$*5l?rA=y$zp8$qK^gvd6nd0H^$dFQieo`$`edZ(24`gG zbQyq>t}P)be9W%JF_DN1Sbwk0z#lu_rN6*b@8oVQJW?_EF7RW??2Lc61~sBf`LxB(1sG zc=~jp$&lm=CK*}}B>Zq9ILOo?wG=S>Fe!2W{-mVF{Yj0delnR0%&i^FmNX=2wFU!X z!Rh0o*kKFU)QyjtN>Qw-5ewQ{?e;v=*^!E(YtbdtZPDpkKBCS3-lK+luWvVYbjWQw zz3)ez&VNwbd{$F{=l?>fc-S~7Xq#FEA$Xj&or{xFV^Xv_L7=)&N3bmvYLR7Gj~t0w zaf-UB^5#o{K+T(h#8`v%M)O@b7Q(k$sw)G5H>(4>Si_CB;bY^^F=cS(Y|QIt&WJH* z@LHtfO$E7$c<4Sc@zj}KKb$(%tJkUC@o8SKoSb-4g{FLW>QqX~sm%B^pD#8ixs_St z&8H0Q&CLcwGYn>*Z>yLQ!(_s-6X*VR>{!RSW0$1mHMI=S&KbhY(j&*}VW>9L9|>d( z5TzVbZymEs4<8LS9zJ|Bc-WUU@XSxWLO7d&;A<2;@FYa+Vh!@+u*0C{K?u9|C9m4O zyCZpbcE7P+x30$OVOrI-)r>uF$?Pf`J*&E`*=uW4HwR+huBnNQtr;->u{CRMWwKP2 zrg#+Q7fpj4wu8+$v2zn|7d$WKxiT*3+<@D4!0qAEG~*(rDc1qYJikq)(nYt9~IG~R1e7Ip_q41B3iDYp96;e+bklB;F(tU$HBTDk7V zf*TRmf4qPF`j7UnPrBxjfcGv@`OS@kRq(F$>v!#1ue;_EpKrYVg5VqM;UQg&K#Q!R zKUp16*K(D!;8mHm~^Ro-}()ox?5lW@W+g7I>1E!XM%a+^~Gac+rEC;^+7}3`;F$a zM-p?P*;3h3@Y2_tnwBm_-2U6ut3O!{u%v?hSRnTLmj-_8s+K%h9MFWd=`T}2jxq$V zhN)Lqt1H*3tJg)7ojB64j8t?7XHPaG_j{zigom;fWjqYNS5;0KSi|T^aOW#0cEo^@ zMrn4P-^2aNwLHcpnS?Gfuiae~hu-%Zz&IQ|n!2iy{ zdzsn6iDXhvwf-_&wJ13%{jeFLVA2k-8`E4Fz$qyj^?{}4% z{wzwyYNs8wJ{Sg%@O#QkFX8;xQl}GBCBW>-08V}xcdBB4h?G~F)J+DjF_aBNyACRaw~#TG4P^u>FQ#!UpRpGeXypwZAw29^r-8JTJUZ<9R{2>-&#? z3Ui-&ES8ZVJ4@Yp)`pz`NdX};TOHNlexB0NrvmSfj6V}|_`6{5z9$pYZUL<(Ds7sY zkmh*Ixjvz@N>;%sAymlDC4obhqD};hg^*o@xShNKHj@|T!0vOY;&~)ltW1q!h$E;G z2+BhXtCew1lPXrcOP9L6OFh5Efi(<)g6@A_P8x8MR~=p&1WDP-UneV=&YkHfOgEIliTJ-4+s<8F%eW zW#+%$N`IBUdfi$2>eg2S%FN3?h&wbBV~*!L2NC4zxhI*-(Ha9>uoK3t2h3sMN3^2H zv~W~Q$tM*H?Z!Z9NtuPqfan1#c8E$DO3EKIn_8AQs_ke;3u(bl;byQm{rnq+svhf6 zB^#42ebk*%WhC}A7b`=$ZTJ1T*ypg9IUUBzrOG9sqt!|}LpKxee4lUeZ+#_m-<(@w zEPIZRlHt5_lq%n_aZ>26h+ON$b$FqfFFoto(le&?WBXshJC29FUb~h2CGt@oQLaM7 zhkRSGc>ntSjZeCk7Pz8q>L5j9I93zGbIA_PsXb8-jj>UKW0VJ!i6G3svITDCUS$mV ziEO5O9{g)X?aRCGe^962s64FPf}7<$Ly0np93-2_$-7@zx^~sh8=R|rJ3(EnuI|`n zZFJHuik#)s8>xoKT3=68`tLhX^Wy)OT_xL=bJW8JDpBF%5&yjFQ@V`t>q|K3Oe53x~4aNfDE&Du3^jHN|q z2GhzX^A_?Kx>$LnK$qPZlpk21eb@f%g2u+rUMqNjyi8tJ?#JhP@-lrzdHAx-%g+6D z;`Y~LZvQ4GX8*ZEZ(Mc_dcf%XLgVIAugA!6Ygh7<$~<{H*Zw1f{$d$Z#i>1r@cb1HCbzQ{d*=s_ z?3W{U`Cy{saDPVUhg5-RtGa$bxT!eYfE}I42Rl5o)P0`Fl`N+TxXb<#WA`ahnKE)- zGYgXvIm5{xdx_M@_l?4JvbxZ(32m_(y|LfQ%h>5q^@FpbGr}iEt7s19YGgoM`mK26 z683Ut9nhc1L@2)V&`tud-6@JXanpIKF^f-{dMrf396X5Ah?RH>M0Elrcmd1@Ks63R zDlrW%>}wIl9nE3)B1g?hAJz^nR;wEmzED1jTG*onY5LOZd;I6KZHK-Yw$cw=U8R=z#fDEN?%e(z5;O;%3Cc?)kMPLPo?|ILVL$tozFQ){*Ir?{YsgNJYQSwszc*;xoTWr zj-GY!_WeG`K=gynYWJ2eBnDO0meZ-a)YHGDnW-<#KUZS%(Z|e7yp>_T?38u|oQI0p z71C~f>4t^I>(Fvi4=RhOnux8!=qzGJXJfqK50u;;;IxtKL)OqsQLzb+k9b-t`@=p7 zf0V(>&5)6U*@wJGN3l#-efpPAcUAs?wlC&v4HJc`0iOfy@hl?$DC3p8l}F{*@jV{6 zeN-7w{zkJ&t?7hEqN(I+Z*m=kVWw1j_R`8|^=e9lg_Xh!`3^U~*CCXB>&jsn@02@_8^x$O=AnQtg)1g#@ z&h6EBrB)6~>M%1U#Dr{Rs0(a>b1)@kc=z^m%6jEB#TiNGlZMa z!am7lapUF;+;jtA!hjZn7932z`lJA_)`god0boR%aA$bQBRL~qGUd;B-wGUd zkl;vk$3g1+BHJpiQrx(?5UNY!)X8p^(?Pgd$>gsW1E>M&AQ&)N<3O8h=?KwlEGxmy zc_>*85$ym9iXoUQNG;Xk$uGYIQFbqG?m=(+U_%CF@&6FbKo+%hECfCeL~ z9f@xTsR$4}@`VHNebGyH-spa`S`2%OF-Tn?fCp`G{6q(;V#Xq)E~ePkGx4gGj#uM? zHq|rtjQ5j38_cZDLj6yJoEH)^Je7NK2(5*AEC^_21)~Wo?m}k4let$a;kioS&ETB> z3I|^PGE~{C{E@sn^0QZNt+kT5Yc{%U+b7w`I#T&4#$Z#Hpe%uNjHB56n=SI7D|oYr z4Y*mtNGp8T&lXk@N=VtJGGNY#y8+-0Ws%p+?h=%h$R_r17P|{nV1aIYAbc0+OGzWy z1nCOoECH?9Ot|YsZdMl0rhq~>v0)KqIi6P7Y;?Is`>cdLaDj&^t+>0@ftTv6#y|3! zOZGOMS~HD_8bCWmp4!it2PyN%3LHse(`y$(w|Pm_!@@d@M@rMUkM-a&&=+yElne@^lz zo;gdB+G68SgxPJrqo9`@urXc-6N@vd%^f7Z15bUhCmT+nSJ3-M@p8m0^2{~3yD>V((1H$(RW9O1_5OSL3thJ(iNGM>9A`V2oYHpG$g3t zg*T*)Du2NIXDcVjViWGxhsa=d_dEV{<=K2VL2XJaa^#1Cc!))Vw*ZDhf<_R?DWU<@ zE2oun=tQ;-hhjpM=x_{_1OaFx8a*%B4hg8&5p5`>5DktI$w65rGSTUj51;{)@gYCN z$Di$UhIrX>Yo9Y`z@Kqm2pL9|KpNCKj-m5!W($CFQi$>!P+UJu*WB#v?Bk7%M2GK2 z1hkw^ptVl{&*#tr9teQS--rD&5Ai_vlYt)P7RaYZU}_R90%8S_7}-)FRsun+*LaoD z%0FQO{ElQ?e*5k3?|kEQ;P%^Ze`DtxZvfBNGa=-LOe9K~5yvs{%na7i?bW_&$ZAsT zhBT=`y>?o<|;i7F+7iGKxWKh zv4C5lIF%P*M?I??Bn@no_#IMYd^#Y789}n#cnDQFi`?u zX$0*rB^Iay0&H6m`3D&OJvRy%u3_guJ>Lk)-Jw*%MUyNncOAyt)n4={$=qVB1ecG5 z1mJcf`B16g_})dX>Sj28s_3}s_!s3A*!;PAF3Y*DaW{mC|i}~j83SQ zJ4|@EtH%0(i!4(9sC=z3%iuM{N-_rWsDdu~sNvL_!U=_ihP>n7!{n?6EithPnWr4U z2um=D-rf z+kRh7L^QB(bm^~HTUd^7eB^Zy4`6rv_vIRNTO{=gUQ-WKtM4ud+o+WIgXl252jyw1J3pIZ^-P0|94a8&>FykW)%9C&$jUZblBrD|u=qH$k zF0QUFwxh@FVGz6Bi~MyEiawf;{53$9i2W6qZt`-F+#s;b{BHSu=vf8wxXBSPqZ^Tl zR=u(m{i!AG#7Q^8?q+I{J+Ef5tVf%SDyo5*YOpOHI);#&3bxB33s4s!N4n+Th2ArR z17cs<4fDcAdcmBS0a#z)5bR1Ce7mu&3E89X>)yJa3K} zV}_-RyW`9$FGYShCaeZ#X~NfH&v*L$>){@HfWLVxKgyQC;ee;i#)Q#wm$h5|7M349 zo`*58{H1t%I@kgERSy|TwOjse%4w3I>`>aEga(pWD1um&>=t_WK8nMry|dUEfWt<# zX+!-!-t|n#f@!Md4(uf0&96|}?5t-!Qq0*M zA}`{P6jc-Ud{K4vHq2`!=n*b7{@)H9IxIcR<8|9O?UgAb*;7eS^Xw6&%E~h2cQJZ| zh+hW!@nJP$2(ApDs)xU@TmI)z-%{jX3Vwo70v>U4MZ!!IBWp>S2fKJF%mgS%=hCHr z#+b?=2g^Y3?;-zMvXUEz%z!}uk$-AQ$%-;kM&L-7l$CjyVI#i_0kj)i&4ei(_Rend zDdC@lcy^4p#L1+g7 zd7dTzqvj#gCpAjpJY>}>63K&X%$gJN-WxL!CRmFn6T?Gy&vQbaX?Y#Y&_$l#-8;w0 zJxl%z_t*{rUNVs17x!1=&CrD0M2?YGnk5VoW(eh)p_&^s(>059tMFN?UlTJV_QS+^ zapU6FCTJ6HPP{p9P{NFay)2bDFL6gwY4Wt>Jt-se2BmD4`brxzKFM5^xi?Fnlhu2B z&eb`kITbladR6wGn72Exy;ogcZSRTrJlT7DA44B&pDo5@ zUVGjh$XgqZ_?I-0$Ly^!?0rpa|B&s=F<3kh%9dF4T&jzhy{o`IW-hOQ?8izVySD>zZZff>L zs~*nZ9&#Cnz^np<$srGaDtgyO#{gA_p;9wZ|{%SX_H1o?qAO45pV?2`Dt z=o|Befp5!H7$)p$<=5*JKTT%;gBB3 zFLfWk-p{YI`1JvPb@J;FBK!$WlL@$jrg5D~L|iZ9aEuY@Aw34%S!XL|-u-b`JRsPv6Vo_wnof{5p$Y zAK+IfzgqdIw3y+Mm?>aj_FJkyY zV7YTK3&|Mw5I!SUlVl~AK8De|>3sGqn~(sGCbSHT8Z6zPUkC6jG!5YYhrKrekE+P} z#!vN@q&s^$YlqNjLI^uV2nZ2F2#bgi5fzY82$5|Z2X{vuC!K&W?t(I-!ziQ3_&SUN zDk?e{5fK?g1_2S-m#~E$LdbIK`<-*UNr0e?`u{)Q^L+2^zUS6GRdwoA)v0r;>fT$` zTHI{}w$)2iDeswukkD{|9Rzk12x&$5&f%#1YCh^|mRbbK9jQJ*+25;{a{a1RsDVe-M(QgNmJ)6}39}@j2H1U#gc*ob zVmZfZISmrbbpi+L8EOj+5m<=uYcc#{%utDYgSdz3>1r41EnDrUn}9ij+H+e7wMSUj zdxWl1HQe6-<`!LPaiFbpuE$7x8baj0Ndiam{7-Xqjmwofon1} z(h~X@^~xB;re)AbmFUSsHlek8pcl5DH4?N|KGw62cA(tZeKXuAxWu8y zMgUeyPwE6#31}CjfwLlkj zf?H7}pp9GttpXi_4+9LR5bS8YnOx8f1EKRDgogC$&*&zUd@jndoBki{EW>(f0$qh( z?44Y*-Co8Xct$pBt2h_)2)rIRLrx={>S3S_q zNaZoVsvqj(OErk=Lk(r?qlR;>s9V`isA9GgfZ!UiKWOH%oq!vX*d>i~*|nN?T!(vz zz(VoGKp7a=4}`oy+^AhOiECF)=GukM;P!MsmkP8F`pLkccA+8Ak`NbljI>b4fT&|Y z)G;9H7;ut=K~2M*Bjx0#0Vp9C4F-&)6mee%2%Q9&OQC{qCU|aPxe_ZxY)_no370S~ zX#tUxjxd<^k?>p(u=fI!1kcnWSSGr@i~igxNP`Ql`f08W$b=Vg6xT+Vr6}*J2FXBs zxs!S!{JmUqk#CAjJVdtwQ-V^D169272k4f3o?*|1;TTosuc4n~HnZaUb z2IHv#`*xD>Y-a|uCPG}cGlNC`*TT-YVHr>=(DW?%yF~K$!@>}>J4^m4l+&Hi>%9Qz(T=aFYck@z5(te)@#@g1Cnpa zfIT^AX@kDhek^SY`L}f9da&f6N5vS(za^h;1sp)50S9v{K#FJufa3+C6~K*F00{X9 z>>tn~ET2VESH&X9J*8G%bPe#u

NFbdwh_N@8V;oF_^vNF>v@7km??MY!oIxUps; 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ĂjkwrWWOT-3jqI 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%0D)47q+RUNGfist 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⪼#*7HRT!Q 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 literal 0 HcmV?d00001 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/all-axes-combined.svg b/crates/resvg/tests/tests/text/font-variation-settings/all-axes-combined.svg new file mode 100644 index 000000000..6f3fca97c --- /dev/null +++ b/crates/resvg/tests/tests/text/font-variation-settings/all-axes-combined.svg @@ -0,0 +1,10 @@ + + Multiple custom axes combined + + Combo + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/auto-font-stretch-condensed.png b/crates/resvg/tests/tests/text/font-variation-settings/auto-font-stretch-condensed.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd7d3298d5ad4becea1a44b8e92b88870bccc00 GIT binary patch literal 11297 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 + font-stretch condensed auto-maps to wdth axis + + Narrow + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/auto-font-style-oblique.png b/crates/resvg/tests/tests/text/font-variation-settings/auto-font-style-oblique.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bb7438bb3adbd47ec1c7cdc9da539de3c0d24d GIT binary patch literal 9990 zcmeHNeNYo;8c*1=>4}l)hoe z_WG+Yzp0nsV6eab^6kUlc|%oGpL~D5`Tfn?j+YF5JO5eyvH9@tDDz9HE2jdLZ9A&J zKCnSIu!Y&pe${^cSj+L5rW>UX(dk^?yA=albLZ^0*GFmN{V%ZFjMgz2K6Bl0*o1d3 z(I?6&WpD+zo+&MdzssM_KBvR1(exps1K%5?Ph{IpOS4@&MY^K2n;3C)88+Aux&=iBb+#j1=Dl$!HUpHWDhg(uwERM?`=SK91FcI8df1% z%S_0uHn5{&AhcRCOftK|=(=OJWLU)Ph_@pkiKHarnFy0acso*Vptwh>B$7H2P4Y96 zQi4@q%u;$SC91^f?A|c>X&utZdr8ySx~ogBED0)4oU^*}umtfB^n5H5!#d$cB}w5~2Mm@b+8(n7nR-1>XW{-G zq7Dxew1&f@psLljnA;ne0<42+g^$fxFX_OOmTLa2nk+Zk#|mzPw)WCmqynq|uxEvR zq6$gm&}(6;IkegpO|P|2Jj(SmMOfR-?nFgaoPV|U#A9Igl^V>|!>^Z5zCTbm(#7-> z+EOf-mOHnp`auOhSESdm&3diLXu@}0D{y~BT1Nu2Pp~b-aA%zVIdgxiQBgincO5!` z5yG;RbG$p9JpN$QFx@mf&g>_0Owe8kM+^<%>x1rT@G{>$m(IPTX?DrA4K3O?=VLXU zd?Rdz!11l)G{@_reBIPE%D>|t=rs|Q53*|Ej?8(#DH%?z=YP^km75b9nGxf+% z_jM@nXo%5y8&l-H0bi=UN#At{QxRGZR=YOW@(*E&zS!LFlX+}gLw#Y5NvQ8UKa<2- z0>0T2_LM%yE=xKeGam`uuY*W@;htW{6qOGc{uLh9zr&+Cah&(~L>rKe+7tD7=Rx-~ z!k$BzIyyn2jnlu#6|xkW&%VW08S?@ZU&y`;ja^3Bssa*cF4m&YF<^9BD4l{#;4ahKg*g8Xw#M(6{WY6mAFt5o#Nt_y z1ZfxfKwa*MGa+@XB}w~TEji_DS+yEvjcg~Q18OEb?#fK zOde11mzg3tWwYA0U>=z8Z>f-jyA%A+vlgQ7Miiv|8ujPkPBC&Wgr57lObJ6Hfg0#U z15}apR&`SyM&Fpr(@eGvZ-n_vy^R76G-81aJH(grFEIr?jVu)AoC^Q0<1=mHXx>zf zXh*0d+dw^r*2m)J3w$*!LiE+DI450bz$V}Cfo57ijHVFYOIFq{w~tpDJ$PrGp$Xpa zfP1=+$@O}Cuv+XF<>`@AqzQ;fHTe|Ns%cgrib+)Lg_K#xl=8v3 z^xV0cu%22tx+k4`J9tivZjmuxD6fUzHEOTArj+f_Yh4(&qQzjNNRo8O&o3fp1;w#Wd|(s?OgKeGkP z2KadRTxK)h*ophMYunK~5Ej^spnuGY_pg>xBIb4>JFYP#W3_A4XBHApJ-dTFDkbdJ zMRpuQU%(98*(XBP9ZVGB8x3`YE>tUn%k2|LJ{Ncv9CfZUUavOydt?+?zsT&5fg`U%jtgQ1s!VAAp09@7 z0SZ|GLD?UupGHiy&$5R5lZHAVYr9GLB=jourNVoLXgbY4j?&>+=#B8I{m(-fD22!E zE`&E>!H+S%Lblmx8p}SQAI?Ik?|+8P2&GFH37(U@bNYIAe;6SdzA@p#LAM9JW?*(Z z+XCMEaKkc9V#WpDmk9~h7GXs_T3(QDI(|;9dtW;eBHZ(#Y$dy)g&kX$iGeFz`^jdgV4&^H);1jRJpvNtb23#@ z35mHa{&?1E>n9Zw9SZMlQ6!x&pNV6S{?t-8qMr5Fdl5xa9=Wr@z2I;6J;)!@h!Fut zsis=U`VrAA5oAlb0TE;%{C;8?0@068q+C(i+g-@r{G;kicl{A?)PTg)YpocauD%lX z7==|0)Qgxz+=X7$dni{4ODuOaI7_eP@--CFkE%%!1`>zRg_2W%q5=-07yvk`p(v0r zQZc#(QVraS>NtJYDpo(@qZVORc)81z)J+Qa64MIAgw`^MCSEE4p)Puz=&B^QX`1ud zrvTkYOt5{9^6EECF27HdsZOLLraSLwWnMi`V8=pB7Qx>rv(aqLBcW0pP+i@OB_j#% zLXs{9L=XaZjHqJ88mes{1&x&qxeGZ7d?QwFRB{a#Nr)kVJ-=M6eAl%_5l>N|#Z{AU zu`QrHQsf5PNlRMUQsDnq(gE@jMDHCoN5V5k6e>Ze?paKVef%r3Eh;N6cJaiiub;4TGpPvR-w`C?yo4c`c-xldRCM&m zh}gXdPlt2W(F6t1(sRPL+E{LoX$9RBuYWn_#rRFqrRc%F5-!<2MXOrk(t#f z5|DX|ybE-_cH9}4@tyTTs<8?0jBEeQV5wtvoBI)N>ZUSa=}q2l(4EB)1R!!x + font-style oblique auto-maps to slnt axis + + Slant + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/auto-font-weight-700.png b/crates/resvg/tests/tests/text/font-variation-settings/auto-font-weight-700.png new file mode 100644 index 0000000000000000000000000000000000000000..d4dc143145fb6ad1d7bdfd58040bc5e003db11a5 GIT binary patch literal 9609 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 literal 0 HcmV?d00001 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/auto-font-weight-700.svg b/crates/resvg/tests/tests/text/font-variation-settings/auto-font-weight-700.svg new file mode 100644 index 000000000..9f718eaea --- /dev/null +++ b/crates/resvg/tests/tests/text/font-variation-settings/auto-font-weight-700.svg @@ -0,0 +1,9 @@ + + font-weight auto-maps to wght axis + + Bold + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/explicit-overrides-auto.png b/crates/resvg/tests/tests/text/font-variation-settings/explicit-overrides-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..685b8087bac6c3f9a1849ad2206a65955f165234 GIT binary patch literal 9259 zcmeHNZ%k8H6o2K(g8&bhS=I2*WiHtg{?0L`$V%K?95Z2y8)*noSp2}WVC@+4prtKl z#0)q6G*~9F`{GPWXibRxvDNqHtS-^oPpl%&zI72ZQ2J^Iw9xkL-uG(3mIbo-#qA|+ za?<;H-tV4!&bhyH?)~bc%Ds3}MiPP`c*XmB_9KWW4}KFd@JoB=$yNl}_PAot?oSBO zBMSZDmFnJW9=2`vn_q68`+VO4WAo&2_;c{}&TN0<c-lwY`1V3oWWocRm{Lm7 z0-mdzE59K}$#~02odeS(6WR307_aUAg)V2DY%j%)rZSUZwU6&m3Xy3W&5b7bnt@`& zK&Y|3nI6$OUSPOUG*BX~11Q)bh=-aP`tsGiv1|e+#N9#D7#{=VG zx9XfvVDrEP*n+hMClNvt<{2TA2zguBZouX)?2?e`2%O|OqEaDJ1=!%It3_uA1TUnz z6ipG=ejvB=O=f>!!Jk8$+bbbyl&VviiGX9NfW9>5>eRWX46HqdW3u0BGKu`q5`4Do z93Yh^awQ4ArjQ&WD4Q%ea%><}4zWGOV}sJgX8MB9?cGT=di$YLqc4jd@|)%W)%EmW ztzz}DGZ-n722zeBk^@`Q4xeAv5)PwP=BIYF{QFJ7i*%h$QH_*E&rSW#W=J-J9)!5Zk zd}{P%(--`wykG^C)(42**3wbL$S4(>Hszm;*JOg#HTfMX1$}AM1#72nUTh^~g}C}f z=2uF2hOFswViN53eFIw&>t;3IgXqWxRU}{8 zt*HCv$nG&$o6a#+ehbusRkEdXN}4i6q|-gv@LDwp=$7my;5}L2+47c(D%)^)#xs(q?~O zX9-hX>nVjgc~L^ODXj~L+eY4MMDRO%XKB!g!x{vGKHVq#mmVq@l + Explicit settings override font-weight auto-map + + Thin + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/grad-negative.png b/crates/resvg/tests/tests/text/font-variation-settings/grad-negative.png new file mode 100644 index 0000000000000000000000000000000000000000..587ce9b577df2e5b60d76fddbfb8e0cc7e26ed66 GIT binary patch literal 10334 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 + `font-variation-settings: "GRAD" -200` + + Grade + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/multiple-axes.png b/crates/resvg/tests/tests/text/font-variation-settings/multiple-axes.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b0f756a1b7f754f0f4982fab1c6b8b5eecf483 GIT binary patch literal 9556 zcmeHNeM}VT9o}Vh@K_exJ9QOA(+^|XdQPjrAuN!#8f$5=X?i6dFpwC79KvE1nLR#c z7h@=X{#9vJ*hb@#NN_GCx*RU-Xb!Kbx3}Spf@NU`46Jv2?5wNoEW6C~H!}-bx!z*a zKiXsy_7C27=Y4k+D^&;0GP*57CEzg{+YGxS$-y5;;Ysg`ZqzdP+eW`6&J z4;#`;AMB+MGgmvmy4H4m)-%NpNsGc0xVM@82J1LkVx#g^(AFWdniH!MUd9<+`MrRbho0fXx*ul`SPya#d zl+^basW+M{gMqKL@x}Tw#%$>SHY@ca!Iazrh(hQP1xlN?l>WNIDx?M&T~rsLL0xmdy!d$uRfxSJ$D*~c$2zj4d#%{qVVTM{!w^@ z$8$gAr}+4Rv6FemJfm|&IBQ2UPib<3{oEm@gBZa@`!s8R_NsrKwa-A4XQR8-XhQ4I zfiaSLtp`oT8knGzbAH)jw2z*6OGwU4;I`nMl1P2cOYt4zdj?&BQmEbnzRE8}_X&AM znsr*LXyI3jtgvuMY!Z_Bcp|Z=Nyv~UN%a&ymS(M%e0$dYMOHp*5Sn_)X18+q;%h#n z^2IX0!$0aDEp&-NkqxhvmOHg^>?2DBrLIX~-wWRBi6(S>mAn#5d{@ljQkZO~##@c% z(G#~;6Dx#t7;B%UV$^!K7%}y#d}-nyhWv2R{(!s*O{X-|M-2AyUEU&wGVX_`{-YOo zQkOuyEib0vf32LWd^_l3@8v)_(=CIKpV|;>S;H1FH}pB?D03944#oAOe@mN4*IJ|*r`=ZZggb?Z7;Tn$acNMjw+aHB{tn$9yeA@nKQb8wk0xV|`2or0 zmL$O+hG3-Nv{W>*G74~z!VZUu;(!h&z`C;Ob~@X08F0R?s7W&!%B(a6c_s{(^m7T! zRehf}k@zv@*u-=Ik(G~$jChdg=9;8JERu0X+};qYZPwWO6;^dHIaj-u&;dOA!oVQQ z=~HY}Pd>$}b<8bdWUIIpPsRqM*Eg%Q%Lc~$0hz^AGt$ZxL}kWvXGpIncB_0MV`Je+ug8sMMtA;EGku%B zuODeqYX79MiEOCyrPHO}V699hetEIwZXH5}cbQQ?hN_NQd1ZepO zc&cY%(7-{a4G@HK@8d~JtK?#Z`Drj?E%7a^ORfU{3+lj+I@K19EPvivIn`d@eL7E6 zQFhRBP|8sl$q5ymBOB3ymI{B(Gd8e6xwKa*%g1*478pSrQa~+fRa@3zmxw+&S4$}v zJPFDxrQ)<^y3Al2*Dp}V6(a?7A}%N%f+8tYiub*Gj?ZUR#88yF$LkWe?u_B*dd(;4JG2B~zog>e^OFgJ^IjYLeJ@EfpJ) znq>QgOdNKngyhZm(WQY;lo7I7l8Wj525NlAe;pTmWsl_bL@IVY83i&D@t03xq%N8$Yq82&t0iRswbMT*`hu(2hhT%2AT{{WEKx)q+YQm);E;$% z$qW|GNXe>=WglqCc@{q=IvR0M%po#bIEIzMY@JMH3%~+kfq3SMo|j9>ib5hv@sE6H z4>+bb*`lH*mpi0B167E-S7laN;@EyI33Uy!Nj~}p4=&-`jlv4MQ`s-*<3=-j){EU* zW=X2}5jN0HA16kR8PB0T4X$TJOozcYUO2M@Oj3QQY?oJ;FcjA`73EY1li2ip&wF$= z;s!4hMn7&yJlknT>rQHh+C?EnKGpZ-gU(Jqoge!|poD4XD9<;0Mj_3KSl+=dP-x~! zL5sbl@_6TC82Bf=H;h(V@A?#OoAvX(h_3fl(z4zekm2ZGDxBAU~ zu#eoi!_t5A#W1?dE23L>v_ya-kt|4 + `font-variation-settings: "wght" 700, "wdth" 75` + + Bold + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/opsz-144.png b/crates/resvg/tests/tests/text/font-variation-settings/opsz-144.png new file mode 100644 index 0000000000000000000000000000000000000000..e5d49f9fbb6cf2b1d0d1425a5329ac65d1bcc678 GIT binary patch literal 11034 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 + `font-variation-settings: "opsz" 144` + + Display + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/slnt-negative.png b/crates/resvg/tests/tests/text/font-variation-settings/slnt-negative.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bb7438bb3adbd47ec1c7cdc9da539de3c0d24d GIT binary patch literal 9990 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 + `font-variation-settings: "slnt" -10` + + Slant + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wdth-151.png b/crates/resvg/tests/tests/text/font-variation-settings/wdth-151.png new file mode 100644 index 0000000000000000000000000000000000000000..09a03e5b05ccc8dfd96c09e8061905c6ce4e0d1c GIT binary patch literal 10523 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 XPxXA?M!}^=$@4qYpKJSF?xFt!CNY>T literal 0 HcmV?d00001 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wdth-151.svg b/crates/resvg/tests/tests/text/font-variation-settings/wdth-151.svg new file mode 100644 index 000000000..a73f2128b --- /dev/null +++ b/crates/resvg/tests/tests/text/font-variation-settings/wdth-151.svg @@ -0,0 +1,10 @@ + + `font-variation-settings: "wdth" 151` + + Wide + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wdth-25.png b/crates/resvg/tests/tests/text/font-variation-settings/wdth-25.png new file mode 100644 index 0000000000000000000000000000000000000000..9bec17f56078cff50a148a3fbcaf299ebb7e965e GIT binary patch literal 11055 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 BiJbrd literal 0 HcmV?d00001 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wdth-25.svg b/crates/resvg/tests/tests/text/font-variation-settings/wdth-25.svg new file mode 100644 index 000000000..6b690ab48 --- /dev/null +++ b/crates/resvg/tests/tests/text/font-variation-settings/wdth-25.svg @@ -0,0 +1,10 @@ + + `font-variation-settings: "wdth" 25` + + Narrow + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wght-100.png b/crates/resvg/tests/tests/text/font-variation-settings/wght-100.png new file mode 100644 index 0000000000000000000000000000000000000000..685b8087bac6c3f9a1849ad2206a65955f165234 GIT binary patch literal 9259 zcmeHNZ%k8H6o2K(g8&bhS=I2*WiHtg{?0L`$V%K?95Z2y8)*noSp2}WVC@+4prtKl z#0)q6G*~9F`{GPWXibRxvDNqHtS-^oPpl%&zI72ZQ2J^Iw9xkL-uG(3mIbo-#qA|+ za?<;H-tV4!&bhyH?)~bc%Ds3}MiPP`c*XmB_9KWW4}KFd@JoB=$yNl}_PAot?oSBO zBMSZDmFnJW9=2`vn_q68`+VO4WAo&2_;c{}&TN0<c-lwY`1V3oWWocRm{Lm7 z0-mdzE59K}$#~02odeS(6WR307_aUAg)V2DY%j%)rZSUZwU6&m3Xy3W&5b7bnt@`& zK&Y|3nI6$OUSPOUG*BX~11Q)bh=-aP`tsGiv1|e+#N9#D7#{=VG zx9XfvVDrEP*n+hMClNvt<{2TA2zguBZouX)?2?e`2%O|OqEaDJ1=!%It3_uA1TUnz z6ipG=ejvB=O=f>!!Jk8$+bbbyl&VviiGX9NfW9>5>eRWX46HqdW3u0BGKu`q5`4Do z93Yh^awQ4ArjQ&WD4Q%ea%><}4zWGOV}sJgX8MB9?cGT=di$YLqc4jd@|)%W)%EmW ztzz}DGZ-n722zeBk^@`Q4xeAv5)PwP=BIYF{QFJ7i*%h$QH_*E&rSW#W=J-J9)!5Zk zd}{P%(--`wykG^C)(42**3wbL$S4(>Hszm;*JOg#HTfMX1$}AM1#72nUTh^~g}C}f z=2uF2hOFswViN53eFIw&>t;3IgXqWxRU}{8 zt*HCv$nG&$o6a#+ehbusRkEdXN}4i6q|-gv@LDwp=$7my;5}L2+47c(D%)^)#xs(q?~O zX9-hX>nVjgc~L^ODXj~L+eY4MMDRO%XKB!g!x{vGKHVq#mmVq@l + `font-variation-settings: "wght" 100` + + Thin + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wght-700.png b/crates/resvg/tests/tests/text/font-variation-settings/wght-700.png new file mode 100644 index 0000000000000000000000000000000000000000..d4dc143145fb6ad1d7bdfd58040bc5e003db11a5 GIT binary patch literal 9609 zcmeHNe^3+Y8BSP997C|zQ=_2LUa!;kR5G6YGDe(hb*yzpu0O0}IX28VOtcXaPdUQ@ zZuT5%J+AQAna&}kqhp=w;5srI3JY1i^XxQ-8D%hXV6t!p&I8GYR0yzU`|f^GZi+{w z|6M0DFaz1_x9|6U&-*;jyWe;6&0X8oi&7TJWHR-RpKtw@OeS9|{w`F&CuNm2r83zM z-`uhFjo(=1j~MJPukJndX;3&i`lo+Hm~BC%DRem{vC}raFz5Y;M*DLYBJXo9d_(< z#w@3Pz)Dw@;bIv0!o`TOteAD$yf1OmRgBNtQvgv2O=3LE@ItF}Rer2ajN^i^R|>3D zik2CcxjG<@(k@{w3Jir^YV$u08wC~*JD%-0Na7_a@=Tmb;=CP~8xZ%nN{Ut|?n%B) zR%$9R(Z%cx-e^k}O7WENYj|_5Jo3@S$cEWw5x&~Pn1VM>3OdmnYI`NKD6E*}ABDZX zRI4^pd92PjZDLn2h7jQ~W7JL6k0Qh3u(X8|P3aROa-v`JsZWfP2ic~uC)mm4VOy|~ zF_(XSH(pg$WN@4L!1#+snwuJ48!_>jV8PRcO;578-_e$S*KP3GH&qjoEhqjk%kmPZ zJc`_ELFY`Mu-<Jzr~zraWWa zj4}Gq;fgG7FKuyP6A78cI3(pucm*~m092FwMJ3xv?T2!~x!Bd0o+w!#IEtYlzg z+Y4Y9MG+|#afLTe$lL3PHYJvpNM~||_z^-~kqPkZ;StUZf$NMBS}FaXH6s*BDcVo0 z5sL|}*7IsG(uATH>qpQT)D=rm6;_YtaJ!lEP~h+yZatG1qM~!qJUGNQ*=h$3Lr!u+ zzB*~{szotNNU3)v;2&v57hHB%51u0f@Q;w=P*)^tTTsgB{WW5rnjvJtl#;n$$0})* z7W{}=%|plm8Py?<>rbc&r3G5aiN0-5liqy@ETw(WZ`9=6j#Yq~QBiTXLDl8SZJnj*VxLJ>)6{?J%n%(jse{f28Q{et@giPP{* zYu_iT@j~_?z5f_MnRP;~;3+xDfSK>%M`ArDxS825KBflCQ`UrTK=k*RbnX3eDEXCN zR86mBo64>qOSP`UbAsccm(*F&(z*O#J-~K z-C$EfUHF)z!5fu}Ip55{2=)QFuTJy8h&f{NzGl>HE5I*%`wd17yrQAXBEHmcI^Haf zK-4R-yrHVrrPhU>sB}ehgRnaBjELq?2t>7gH5kxSHiz@>cgPd6Ry~Dsf7s?3GNqYOMUiLU9 z?I($P^l-`I3Q4ox4GC+39io=Nb-Nt%-&7r4!+od0y9Y}{2@O#w+|3J`KOB0DD0aw0 zTcEBo1l`QtyPs<)X68k-K~cPqN`E8LYq2tfcV{3GnnJY{GUCmCISz|5kKlbM;w)g% z)9oqYA4jFLO#=An_nAgL^%U!aRbX$5!d}s{yr}wAW^lWa`gk6SZlJ0>jcuLumg_(s za)Nx+fJ|->UJp{C7X}LqU}jsbeYwi;!G=x*;*E?kL>VJR{gY8@2{~0j1TW7o*)y2i z*e2DxAEUDc-C{)p&~p-deWr{gZjpS(iFh`Jv`ZRQ#7(4hrlg+X(2rI| zoY$G@d8AywJiLa@(f0PpwseH1Ozb&ppHCSs0W}5zi+=p9lp0A#e^pQ7>V%Q8Gn4Ds zt4LO2y9#~@cTe&~dWury0zN6y4yq;^LhUB`$k?-$-IV;+zYOE+nLQyb$j!yDJ%(M3 z`YxD6x+F?T+&z(H^T~a*#jmbNy6jesM+Fe^IYK902m+`PuE6@8(2Sh5QJ|A^+gZ)% zS<*F_2(pyJ-DOOnGvzCQ+pde17bzmtU_3T4>7MbsOupRF;Triae5sKxjI#4}T=Xp& zThx38mkoYNtJW_J?}zl=i7`Ew&nrvoP#s+vHnDHeUzQ}6B#H%FD{lw;fe1+3n}?Zi z67_Sl8t;$f)Rza zxX?~?M|%*_TVz>2ARIs{Ac8T*nrx6mFVe~PKt!F)@o;S@li3c)McgFWA8^8E$sK57 z!pt#bwoyRX_Xqq#Ib0W09t?z%*t4WV@^&ImYg?2UtobrQ=YkTotSO9TBl%n5)Its9 zog)2;l7TJ0?s-|iA#oh2V=M`Tu?72gqwZ{&!?5`VKMZ6e0stbLo_ zti|_M<2%`4|Kw8N9^ZhEi+lW(M*MII91QwDILZTkjrZvZq`S->44pvgM+cj(d0&E8 j>Ib4nk*0@<1+O{(w!FCdx8e~i*^X_ywqE*a;d}o9NLqiC literal 0 HcmV?d00001 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wght-700.svg b/crates/resvg/tests/tests/text/font-variation-settings/wght-700.svg new file mode 100644 index 000000000..f5e426f90 --- /dev/null +++ b/crates/resvg/tests/tests/text/font-variation-settings/wght-700.svg @@ -0,0 +1,10 @@ + + `font-variation-settings: "wght" 700` + + Bold + + + + diff --git a/crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.png b/crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.png new file mode 100644 index 0000000000000000000000000000000000000000..d4983ae87344ef96fdcb713a3cff293c18353f78 GIT binary patch literal 10424 zcmeHNeNYo;8c$dVEg0z4(kLLby>t3uOKb&24KUu-dOc>~`k{82*fY`{`r>$0^!r>|9v93qO7VrC=fiMdhz*9 zuad$kium|9+dnw#^dGwR?pNoV_h%Ni6%Tze_ixW%bszk}pnGo3W7oXp?XOq-_sERtYLBAf{#Nf5V#bOYobWJx4-f|}%)B&DWp z4iJx{%6D3P>nZ|dql-&hMm|{}Aw?yt{AFFBA7#?g0sjjD+R!Z;skOV(s6%X`nH>SsWp3)UdJj>`#uYTg^ZFVIyIWmJuB!AOSW``%7XWc2( z7B+D*wd8%fYaNxz8WWbtKC+*Tl!XpnR_Q>F*4kILP1}B2tdPS>Rxyw0toIja{i#wh z7b6{PrGDqBca2booW^vK=XITR3z6T;x7?%WRn-v^R6NFY%r;pwstA={EAoL`&r&(83QbBsld+1A4We|o zZ!MM0D%?2XSptXnFrO`MsA?^A^wQsP3&;Zm5F=ML2vPGsAaRbu7>XK@zLn|74OldBo4 zY{OfaAc>SmV`Bg=C1iwai9T z+kA`pW=A67@Fz86+~lPQ_$>|1thHAbx1H63dZ)*_#xhx?t{>mb4pBvr%W$&T=Sq+C z?DdURt%IkwqUjnc%3ooC0D-YGE}2QEl5)Bp3BWtM9Y;AWwBv7*;annv53OYa_tCk?c!nhjhW=8V+yVOT+!CO=>k8zs0Tl^15`&6>fKT00)r84A8wA#=U0 zaNZhCcv)`|5iJ^tO+CxHhp9@|c&7GRC$w;v5Bf1CD)E=!U+e$I$IL+092iB zD4_YnE{4@X9mSH%Ga%vZ0Gn>9C zrCT*_k-S#&E_nfRFd|c#h{J1{A#Nx>ygQCurL*P}2IA`e0RoZH9m@>)dk#!O5766u zJ9#WZCGMTsM|Y9($JKcYuWnxGL`Ik~#bUz+Ys)2U;`p(@EcJg@FX}#Gca*6u;~8fw z30p5a9Z#P)bwv}!4>7_K4A z@K&NftY-`8PK|XmY^n58DLp}z>Z~&Yn_2Zwe5lVOjY~>ao( z9nR|QsZfbEfNo(MqjvnLOe4tEe&tADEgHb|}-po!L3MKdGZIm}Kd#L~fRLID_-KzDhqGsW~tGRs65 z*GdQTg;I0bm!a|Y3>%Lub9drPdY(gagvP~%>|2S2#U4p&59==Ua(&U2RQaG@-Q-%~E!V&?CU@A!&EF;dF$@g{bu z+s8K_!dI8mtx7o$Tv$Ggw?ikapN(R^m#L7qmdPr$WBy`h*73qU=%~IJ=zb1Sxa#Qn>Lyttj zsp{sbTK*}PI^E%`e=;v5oszwXw)U6vtN@V`@i1W#D9k3y z0(64gpU_#+5?s}G>p++XTreb*4XB#oBCO>X6rAZS-~1pj)XhXRfWs1IfSb7#A$!~Y zd1RA-4;5;oI}D9rjRcnete)@Vkn(6D zVzy`&3t*cFSO`;AVxc7UED~zRlv$WFtLGah|0c3)EZ2Z5jVcqoIf*3q$WxutnZ5K0 z(g(?m^%X)9yh4?>LB0#sd2L@J$i4GLO8(?gjbSwZCK_rI$B=%@F9%4lIc_%%0(BM4 zOm>)G46xQzb!kQE5u`$%47c)x=&O!{5f)+(;_L)aixSSU0W{)WVEiQNQOPwl$>_%@nnfd)iW?z*GZ5)0TvQQQM_(UZ8TE zZ{Pv4ZyI%659;9sNA+*$(||ZQ;wLiz%0SC}XkQ8HJJz$8UgkdqK&t@qt=JdHO|@t` z@^&H?9l4chS-#=hF8&Jvk1!F)1^KTl1>$hLh`YreZb}>o^YkToL5PVA?1i;{@ z9KkP8g74Pu99e^(DJ|Xx1{GkyUgQ6vND{?d%B@fEl9_?It@W+%1P_MBhszuIZ}Ber erW1uB-WMK!@BQf__##p8;^wU9+kRW{#{U2~MNS|9 literal 0 HcmV?d00001 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.svg b/crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.svg new file mode 100644 index 000000000..a2f20e5c1 --- /dev/null +++ b/crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.svg @@ -0,0 +1,10 @@ + + `font-variation-settings: "XTRA" 603` + + Wide + + + + From 49771e2de0a44aefad81d92f3bf52f197bdbba73 Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Wed, 7 Jan 2026 18:08:15 +0100 Subject: [PATCH 07/10] Add font-optical-sizing support and fix variable font outline rendering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add `font-optical-sizing` CSS property support (auto/none) - When `font-optical-sizing: auto` (default), automatically set the `opsz` axis to match font size for variable fonts that support it - Fix variable font outline extraction to properly apply variations - Regenerate names.rs using codegen after adding FontOpticalSizing attribute - Update test reference images with correct variable font rendering The key fix ensures that font variations (wdth, wght, opsz, etc.) are applied consistently during both text shaping and glyph outline extraction, so both letter positioning AND letter shapes reflect the variation settings. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../all-axes-combined.png | Bin 9904 -> 1265 bytes .../auto-font-stretch-condensed.png | Bin 11297 -> 1594 bytes .../auto-font-style-oblique.png | Bin 9990 -> 1531 bytes .../auto-font-weight-700.png | Bin 9609 -> 1191 bytes .../explicit-overrides-auto.png | Bin 9259 -> 795 bytes .../font-variation-settings/grad-negative.png | Bin 10334 -> 1488 bytes .../font-variation-settings/multiple-axes.png | Bin 9556 -> 1145 bytes .../text/font-variation-settings/opsz-144.png | Bin 11034 -> 1618 bytes .../font-variation-settings/slnt-negative.png | Bin 9990 -> 1531 bytes .../text/font-variation-settings/wdth-151.png | Bin 10523 -> 1583 bytes .../text/font-variation-settings/wdth-25.png | Bin 11055 -> 1401 bytes .../text/font-variation-settings/wght-100.png | Bin 9259 -> 795 bytes .../text/font-variation-settings/wght-700.png | Bin 9609 -> 1191 bytes .../font-variation-settings/xtra-extreme.png | Bin 10424 -> 1659 bytes crates/usvg/codegen/attributes.txt | 1 + crates/usvg/src/parser/svgtree/mod.rs | 2 + crates/usvg/src/parser/svgtree/names.rs | 457 +++++++++--------- crates/usvg/src/parser/text.rs | 7 + crates/usvg/src/text/flatten.rs | 39 +- crates/usvg/src/text/layout.rs | 78 ++- crates/usvg/src/tree/text.rs | 28 ++ 21 files changed, 368 insertions(+), 244 deletions(-) diff --git a/crates/resvg/tests/tests/text/font-variation-settings/all-axes-combined.png b/crates/resvg/tests/tests/text/font-variation-settings/all-axes-combined.png index 6dff00179129da57d59eba114bf3b2146f04cc90..203656bc746d8d09566543923bd780524f53fcdb 100644 GIT binary patch literal 1265 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 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/auto-font-stretch-condensed.png b/crates/resvg/tests/tests/text/font-variation-settings/auto-font-stretch-condensed.png index 8dd7d3298d5ad4becea1a44b8e92b88870bccc00..9cd3554801e3d0937dfe0b630fe98796afaee435 100644 GIT binary patch literal 1594 zcmd5-|2xwO93Psstt4h0#?>N~PZnM3uJR>h3kx%*!j{Ol8`c+G$*_D|Y5DS*d`ZPT zY@^S@bX08ablKC1YQx9_j3xKqJoiU-Ve{dV_5fl>72 zlq~jTUhVZ;PLi)isc!iBR`?c?6b-KlNIi_ z9Dt+2PlyHn)u41lmoc?Dt(boA)T7ARU5d;dG_6E>8lb5fqh*JmN$3%K^g@Kkiv7qn zR#-8W%+({4Jaq<%4oysZ(8Q1xO{%ssWC=AaH@&c$`1rwMy6?W_wp|6iftaM$GBbjJ z!x>vz8u;{T6&K5+!>D9Lf9gC`(pH(wcsA8$ zUFE)_eD<6h0U*D3ab|@`JTj_itoDup%-3s4)trn-|NHA4Y!P_^fq-G*xOFCk>Dos; z86IVW6e=#i%IkB&>!OT+Al=GmeAMR)BE&*`-5 z$Kxysj(J}E4Ncc-WiE-~a{)n53pwTxUbNjL+V^ok^C*z1j8nC2`IvGfUI35Y$B%N| zk!u-fYXu^2TG@%+bTD35Hinkk?$xe7J9OZ1Z(v5K*dv zewryFa8Q2>x`;H{Yf*J(MQz7IwKrFY*iHe?gf*Wa-77D26iWaQSN z`vCDm7jR(n^FxCTdCr|p9xtDlvsmN4`Hb8r4T(|rl=hXP zlWZTe$ljrjyhVn^5<+yzpB6neo>3(zKRX6}^ z>oFrCk~zJH7=vw_-MhB*3(jjM47eBv__Uc1T&T(M@jdYpA~gqOz4fPiUN^vo6YUlm zmh&6ror_>MN%DlxV=xoieCsNgO0 zgTqKfTu4qv=htcCkWnAKJ6G!RmwEnC`e2f)-HY&@bv4i(n~IB* zM;kY;WL8eRV^vuK1jb0gZ0^;C40m9t7FS2XUHa}zPfDrgieeRrT>pJt*GEeEv$H_e z<^sk#VE+^)=Ad;+qQKRJf6;6ppK5C%d>83=C54a=PHhfEs{FT zB;L5BHP)&%Yij;JZ!wRU?mqLn#}M|#O2gp{RQFPkz#NAn9w-2gKP<8L1OH!?`SU1+ f9u-=6JouQ?NF$iS-?zJD`2&!A$lfjc={f%Z=IE>1 literal 11297 zcmeHNZBSEZ7EZVlS|MUTY!p$p-R*Q+TGOq_hmA1ZE#tb(;O=&-(;_#_I5sLGxQN_~ zXcC>)t#P{6i>ext8a>0>^0TaAJg2dcC=e^NTr0B2x zv6GoNLT`1mFAc>SD@=SzDBD@`u8xZ%1N}|kIb& zQiC0RWW}FaCsb+fHj(f!F2ewc1R<t5);*nBcMM+sLU{4I z`0M;&Y-|0R>_q$<f0QSZ|&ao-IlAzs9$+L0pOX60~{nSzPLMXzf)6@GVaL1}Tu88} zEy15yU{c*~G5TP`l->&gcOb>P0v4s9KhYl~>A9Q9l?!^j)A)9BRP1Rq+IutZ&+z`Z zY6uWLWZgcOnMZF9Z(_FZ2X6V0r!f}L=diAY*u3v?dBP3^hNd1?3)S{EmxuRFQD4D^ zQ7BIY^{X58jTV9i=F<($itW2ycOBeWuVuB_woBH0=a5u+@$!u~rpy@I1Prj-HH^U@ z8hu!;>S`18!|CS*UmCZdB-vX4WqeX9ytC(od$ai?OwYK?otOo{YGr$9XwuA%O<+<@ zebHlc3rxxL<1~L$4Oom0`4%=8Ay<@236w&X;+M(b?A- zOz^Lhw%Il?htpE}j>h{?9vVw+RCl$j>}mgczQvfw=Ef_!=K^$R+uilX=ALLNi^WtR z1)&LC?9myT`?3Yx$eK0$(wmiha7}o}wIkhJ`H(eJ z;a^W5kD>I+#OoP@QLp$-`&9$adM|S;sg}T5Ob6YdlL4EisjK%Y+F+N`00zx>+Lz4s zujA_&+5@#=cP^#0fZh3!{|l?8RS7!|%C?M}wviaH5T;Hndu_VrZ?56DIIYkgW>kIW zN-9Yz2=)S5j>QDTqB^h9o1kLhr)yX-h>k+4#d>o=)EPF{WH2c<-pCdTAmcz*dB$Dd zz>?X_VtfAz{zYj$=D|7KP9_)Q7QaCq(X~uVbcsz9 zX2)^>8KB#Of(DthARzRuB(7l$+ahe{PipFOxSd8|mb04PgS=;L3=YW{D5<0a)HdXQPxzubEmOhu#%G1=)=&noz_xni5A%&sANKq zTLHohZGpj+`owiE+wAbkJRln7l;@PNSUzya+MVEk)qDxxjUBnjX@_cZWiYLJ-riqi zsD(mDS8 zQ%4sPTv-dyZP-WBxE$(?agV0nBkw+-8bD?33@Vs)K@To&{A_M~eX0i1K_YiDGzQOx z@h>KXGxqU9yBlqk)`O{MTfrh&Z<3Xm{J!5v*G9+I@kgZ;jE*Jqb!^jKd0Tbz_5>!` zT%<}r8T*m>l0%l%A#TG3ctf*E6hU#9Bpz>bg+hDlBJX>E69v7?H5_KRB07P2gHI>= z5pY+6Dp*VUSX76A8?iZF?}TT?Ot=P~N25<7nu$(>mCA4p%tCkj6m6gmsq+vN)66q zLwLusg^S!uxurv2^Puz|!IVTKSSVtq^oJN^bjvJeroAb)hL^C=g?m`Thh}9mI-baj{L~SOK6|4>sg%P;uo3+nNG;M)>Q=Q)eyEDl4Jv za3?!aO>?mZi`f`mHB_@P+AM$2Ifv{Y zp^3$)E)TW*5ketBNChGlf5lTJ$zW0x^lsf4_7(M1d|xN-Cw<(a$ON}OlW&E_AjBpU zzd#z#Ci(-&*{Tjwg_85#9>Wwt6Njoyo;gWzjyk?WG9%dP-o*EFo6MIM8e+iY;~pSy z%(5>7SC-&UHeVW(d2n1Xf?dGWX(DZR;A|#zO>{#owho(g)nZ#9Nq$kRfY0L z-mYP3{9mk)j00&qUFjvsK)n$6TigP5^>t1wkMGOKhlY9J&Y>>Az=jq`*5EdS2aNt@ zZfWTEV(4ka+Nt2}8{NpaGNdn}8%&BI7)*< z86b8*5S<=+$}r($2RZ>;2l_(+8oIT-jtO>8hsNln#)2K1zLj_f(gA68DrmBN*fxmv zDO%pZ7%~T#G~A=Bs2s6A2e-g`5i;y>%JfRB%HD4=ntCST?m!pJD+)oToD0CD6@$Gq zDd+^~Ny~|=4-P|bdC=t{qZAji2Y;+$=Eni8eF#&j8SwN4Vy5H(5RJ}{U=vEQO?b@1uM=XFoHY(B z64Fn{f@5AuIYaISrYzPp^%sv8OV;T;N~?qxzGIBP0K z8qVrOLk^vLFyZ(t7&8I%et>2X`otEsYvh3VEaktaqGIyHnWhuDDdps=ZZI{ebpWZ})0@_u zKDsbo7b@Yp+vGw z-XxL#-0p&sb{kH-3bQ@_PVMFq>n@Maji%aX56=1`SMlVB%sk0|doxz0C0b5M^pu~k zTsc|tlU-QiSEWm9*DVb{eZF42=(@C>`h$7j5*l51{)^eey0qiYy)SJ3$Fjqo7-vMh zH+H^vTx*TuXRAY>>V+Rk+jT6<61^6>F=E*~g@u290gawo81YG1M?87W#DG2bdCnfP z+8Y(Ak$$`OJx9QC$)ziAwUt(X?7ps4bkad)ol&+;Ma=qXrs+542YD3)c0a zJr^~XyCj92z8kePs*QE0-~6x@YOY_WPW1~3Pgr#<(Q)BSm6eqjmt?eG?vx9hv8ps; z!h4mIwYl&Ai0=NYxRP~2SLYY|S*r>oqC%^7w)M*HzR)-6lhRtg;|BV(eU0A;xZW_)`B}Mpy(8!S3Uiq(38AYe z#rItLW5RPgJn|4b>uZ*F=SSNlZ|Q%SA*=DkJ@k<18nNtfwNLl55-R7KzPuWE%XR*q zRj2tQ9v4Y+hr}KzU7sN@_U$BpUG0UZC6h0uM4SJfI9E})^0i)b=#AE+o4Y=4xX-%( zcd^CO-!F24x>6_CiFds(IaO8pK)NL9U4298zvBJgnLF-kss$dh`}In9G28i-%ejBd z_&MLk^hV3k$+D|H+W)U^%IDZJZ}p`gMbG&^&n-*(>N0D`4Yk#3OLy38&f<6S2uWL! zG4dga4z`AUv|B@4;Z|R woF=GxgNmBLMZMk+bketg8`E7iX9mpTew9;F_vXyfAD|-K)78&qol`;+00~I6q5uE@ literal 9990 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 At^fc4 literal 9609 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 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/explicit-overrides-auto.png b/crates/resvg/tests/tests/text/font-variation-settings/explicit-overrides-auto.png index 685b8087bac6c3f9a1849ad2206a65955f165234..29de617c38abf3afac68c64866345b74bce06f89 100644 GIT binary patch literal 795 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4rZW;-{LxV5EbAP;tHgx2#zdT76~*?vLwha z*nvSn!N5KsJ|VxLzG1@r1?xBLKXCs3gZCeHFi)7tz`&I3>EaktaqI21P^L!)3=RiP zc0}ubw}0VPc>ccE^M?VRY}p;ksbbC^Gc{W#JX2IYYrQ5QWeEefm`=oogxDrkAbGHf z)f-H5PXn=mQV=o%%#PT=0#VEf)^bn?r12m%HEx}M$SSyIRkD|N#B#p!rN7=OuHoO? z^0UXZVQO#aGQ%}7Yo`2HZ8eQ^i;#?vZw9#!0bVM@8S2P&CA}3ai8|hQu}+P>vmPt9Pail zb)8pr#pK0a%ZBNci#MNB?Tt@7`l(?14L#rLj?lcW-E6sExw8Lnh{##}FVS@OqlJ}H zcFCsg$B!<{ykWh@%C0}}U(eNjF=rezeNLyZxxV_4)~!&nu)WP+y`N2JEwwlR4MAwI zLc$vC{(tMhVgnQ4grfM8WVTt5+h#uRnXLlNM&0&|K5Ad4Z4}&TN0<c-lwY`1V3oWWocRm{Lm7 z0-mdzE59K}$#~02odeS(6WR307_aUAg)V2DY%j%)rZSUZwU6&m3Xy3W&5b7bnt@`& zK&Y|3nI6$OUSPOUG*BX~11Q)bh=-aP`tsGiv1|e+#N9#D7#{=VG zx9XfvVDrEP*n+hMClNvt<{2TA2zguBZouX)?2?e`2%O|OqEaDJ1=!%It3_uA1TUnz z6ipG=ejvB=O=f>!!Jk8$+bbbyl&VviiGX9NfW9>5>eRWX46HqdW3u0BGKu`q5`4Do z93Yh^awQ4ArjQ&WD4Q%ea%><}4zWGOV}sJgX8MB9?cGT=di$YLqc4jd@|)%W)%EmW ztzz}DGZ-n722zeBk^@`Q4xeAv5)PwP=BIYF{QFJ7i*%h$QH_*E&rSW#W=J-J9)!5Zk zd}{P%(--`wykG^C)(42**3wbL$S4(>Hszm;*JOg#HTfMX1$}AM1#72nUTh^~g}C}f z=2uF2hOFswViN53eFIw&>t;3IgXqWxRU}{8 zt*HCv$nG&$o6a#+ehbusRkEdXN}4i6q|-gv@LDwp=$7my;5}L2+47c(D%)^)#xs(q?~O zX9-hX>nVjgc~L^ODXj~L+eY4MMDRO%XKB!g!x{vGKHVq#mmVq@lEaktaqGIyHnWhuDDdps=1~4_LbpWZ})0_18 zf0u2!qru%)C?jxP!nq?fpyFg)1tQ|`KI~b_-dK;`Ble$$6DuOF{kb4Z_53z zrBf?kacq0I>i-;`Kdupx++WT~J+3-nf2C9O^jYIb-T8s7&5rXUZf|_B>F7bVJr*0c z1v%+XzbI^Hy>Xwr!)DeS^CIpW8)*I121ofiEH{dsT+lb=z}$##kpLI3cSoX*HcV=t{QSDj9h=komD@IVEPNah`S10l z=b4F?YCn^6qP;YaGBbR>{mAUYnSz@V?+)8%m+x&{x=yzEkF$D<>4UxwDNXqc=Etrq zol`t>rJMOVm84|B!++%)c1Icu4h6~9R(#-c`)uQz+Ze=lao)xd ze>3ZgD^JlX4{6WeGDPK>4}M$Uj}Q!C&6s+_|%&7z|Bl{u@4eNlt5~1+M$<%eLC4$u#x# zJD<}Aj1xXxDUvjGs?nPsu%t<~FJY(rtTRGKKApeu&2)w6QJF=T_xUF(Qe_G8CpIGtJPq_eZz zbZ74il?^(38bg`3a=4evoL;*7M|fkMr1s~{zC7OV6Cypty`8@rh4DVEDmkA2;bqdv ziSJT%`ftD9+$Fn)%Vk%D*e3CfEHgBw-FpAP^-_f7jO!a)dg><1WtMGFnNhNF$>G(D zBQ9#M{ds89g0c-#d%VQ8n|~RErIcy#Up=S1`0pXD1wP{5QX2e8N7rrPGx%t?ovCRq z`_8UfmFA_t&c=EFn0xJ@ep$r@mI$e?(%tsSN2jTJX$T*jwe?Tw-)B?VB{9jKezd zOPOkTE;706&5du1R<(4z5YemFPlWV5OIzF%6aQ$<?e4 Bk#Yb4 literal 10334 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 II;Vst0Ijs<_5c6? literal 9556 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 F{{kGb(76Br literal 11034 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 literal 9990 zcmeHNeNYo;8c*1=>4}l)hoe z_WG+Yzp0nsV6eab^6kUlc|%oGpL~D5`Tfn?j+YF5JO5eyvH9@tDDz9HE2jdLZ9A&J zKCnSIu!Y&pe${^cSj+L5rW>UX(dk^?yA=albLZ^0*GFmN{V%ZFjMgz2K6Bl0*o1d3 z(I?6&WpD+zo+&MdzssM_KBvR1(exps1K%5?Ph{IpOS4@&MY^K2n;3C)88+Aux&=iBb+#j1=Dl$!HUpHWDhg(uwERM?`=SK91FcI8df1% z%S_0uHn5{&AhcRCOftK|=(=OJWLU)Ph_@pkiKHarnFy0acso*Vptwh>B$7H2P4Y96 zQi4@q%u;$SC91^f?A|c>X&utZdr8ySx~ogBED0)4oU^*}umtfB^n5H5!#d$cB}w5~2Mm@b+8(n7nR-1>XW{-G zq7Dxew1&f@psLljnA;ne0<42+g^$fxFX_OOmTLa2nk+Zk#|mzPw)WCmqynq|uxEvR zq6$gm&}(6;IkegpO|P|2Jj(SmMOfR-?nFgaoPV|U#A9Igl^V>|!>^Z5zCTbm(#7-> z+EOf-mOHnp`auOhSESdm&3diLXu@}0D{y~BT1Nu2Pp~b-aA%zVIdgxiQBgincO5!` z5yG;RbG$p9JpN$QFx@mf&g>_0Owe8kM+^<%>x1rT@G{>$m(IPTX?DrA4K3O?=VLXU zd?Rdz!11l)G{@_reBIPE%D>|t=rs|Q53*|Ej?8(#DH%?z=YP^km75b9nGxf+% z_jM@nXo%5y8&l-H0bi=UN#At{QxRGZR=YOW@(*E&zS!LFlX+}gLw#Y5NvQ8UKa<2- z0>0T2_LM%yE=xKeGam`uuY*W@;htW{6qOGc{uLh9zr&+Cah&(~L>rKe+7tD7=Rx-~ z!k$BzIyyn2jnlu#6|xkW&%VW08S?@ZU&y`;ja^3Bssa*cF4m&YF<^9BD4l{#;4ahKg*g8Xw#M(6{WY6mAFt5o#Nt_y z1ZfxfKwa*MGa+@XB}w~TEji_DS+yEvjcg~Q18OEb?#fK zOde11mzg3tWwYA0U>=z8Z>f-jyA%A+vlgQ7Miiv|8ujPkPBC&Wgr57lObJ6Hfg0#U z15}apR&`SyM&Fpr(@eGvZ-n_vy^R76G-81aJH(grFEIr?jVu)AoC^Q0<1=mHXx>zf zXh*0d+dw^r*2m)J3w$*!LiE+DI450bz$V}Cfo57ijHVFYOIFq{w~tpDJ$PrGp$Xpa zfP1=+$@O}Cuv+XF<>`@AqzQ;fHTe|Ns%cgrib+)Lg_K#xl=8v3 z^xV0cu%22tx+k4`J9tivZjmuxD6fUzHEOTArj+f_Yh4(&qQzjNNRo8O&o3fp1;w#Wd|(s?OgKeGkP z2KadRTxK)h*ophMYunK~5Ej^spnuGY_pg>xBIb4>JFYP#W3_A4XBHApJ-dTFDkbdJ zMRpuQU%(98*(XBP9ZVGB8x3`YE>tUn%k2|LJ{Ncv9CfZUUavOydt?+?zsT&5fg`U%jtgQ1s!VAAp09@7 z0SZ|GLD?UupGHiy&$5R5lZHAVYr9GLB=jourNVoLXgbY4j?&>+=#B8I{m(-fD22!E zE`&E>!H+S%Lblmx8p}SQAI?Ik?|+8P2&GFH37(U@bNYIAe;6SdzA@p#LAM9JW?*(Z z+XCMEaKkc9V#WpDmk9~h7GXs_T3(QDI(|;9dtW;eBHZ(#Y$dy)g&kX$iGeFz`^jdgV4&^H);1jRJpvNtb23#@ z35mHa{&?1E>n9Zw9SZMlQ6!x&pNV6S{?t-8qMr5Fdl5xa9=Wr@z2I;6J;)!@h!Fut zsis=U`VrAA5oAlb0TE;%{C;8?0@068q+C(i+g-@r{G;kicl{A?)PTg)YpocauD%lX z7==|0)Qgxz+=X7$dni{4ODuOaI7_eP@--CFkE%%!1`>zRg_2W%q5=-07yvk`p(v0r zQZc#(QVraS>NtJYDpo(@qZVORc)81z)J+Qa64MIAgw`^MCSEE4p)Puz=&B^QX`1ud zrvTkYOt5{9^6EECF27HdsZOLLraSLwWnMi`V8=pB7Qx>rv(aqLBcW0pP+i@OB_j#% zLXs{9L=XaZjHqJ88mes{1&x&qxeGZ7d?QwFRB{a#Nr)kVJ-=M6eAl%_5l>N|#Z{AU zu`QrHQsf5PNlRMUQsDnq(gE@jMDHCoN5V5k6e>Ze?paKVef%r3Eh;N6cJaiiub;4TGpPvR-w`C?yo4c`c-xldRCM&m zh}gXdPlt2W(F6t1(sRPL+E{LoX$9RBuYWn_#rRFqrRc%F5-!<2MXOrk(t#f z5|DX|ybE-_cH9}4@tyTTs<8?0jBEeQV5wtvoBI)N>ZUSa=}q2l(4EB)1R!!xr;{m6vkiI`;A;nCoM{H&5YN?yyS|dBBid0Xn1)gNgEg)v9uD=G-6FM+A%4W zEGO|=EU-wFnzpN{sUbN*Bba5QZt5mtxK^fa#p3=CJG*D*%x~uTaOOF4&OB^9F5K42 z*$Myv+sFuP8~_-B>uq6dP;iZma03$YhY1G_{5J}Az2byn?$+Em+>sE#&IJ`5gFlv< zopYX9&f(RyNV*?AQ%p?i7J2zE-vEFqH4+<2$bYF-gjzmAZ3?;D-ivF+>jTY?EY5v@ zm7|s`1U^_=p0PGqSo$MbcFiq{D~ghm5m8(a`VXNV>~iuKvcuAMKl1aE zEY+ll149U#M+mH|uJP>7KH2HYn*v3!{|;NA)~h@gj^P$)eE15@{6Oi<;%?=jc<&&G z)?Yk~8-MS!?>0&Q(VNWPz@z2+&E8m$n4)TohwQg|6YG6;PNbPA;Bg7&sY8hwOYmgS zx3p5lZ=AP!4?inj43It*HN-j0qP1W7y=%FF`hZ*GXy{$;>SW82RVhDAfSQhtSPC@Q@qloF7%XRwGho1zAVq(phaYDm!~zlvcE6PA+FRnZ{n6{ zQ=3P;vl2=e)5Nce6!{Yguvuo>A|*Nw&Ta0$54C872Dn%Sn#2E>j>wy~v0 z5psKHi@uo;&veh*BZFjF0xj!RhyS5~6tlDC#gqbofS^S<%u<{_J-&JJH-2V%(eqC$ z{r9}l97+d<_2x>FS~F^yVT6PR+(gwE{0cdg-#anyB(E!*`464C*$k?wCW4yPEZhG? zAT*`==X}s^Il4vcK|}cJNTbb_+dNp43wphBPM7z#5lFSO0FvlNdIn^5Wgoi)ylTiL v5PGs6PyZ7AWyhA!%rzG7T#x<8gE*`hlUn>YFYT~I literal 10523 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 XPxXA?M!}^=$@4qYpKJSF?xFt!CNY>T diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wdth-25.png b/crates/resvg/tests/tests/text/font-variation-settings/wdth-25.png index 9bec17f56078cff50a148a3fbcaf299ebb7e965e..482dc68c51e36b3fa674167860fa3286fdab122d 100644 GIT binary patch literal 1401 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4rZW;-{LxVAQcke6XFV_sSZRQ)b0QpDqRxf z7wo_wpkQF{ACQn=P~Xr$Vg7>k8}=VKf8qXv_a8LY{%>PoVA<*E;uunK>&=CuiOdE9 zu8ysiX?OnpHZlIo^o;Yn)!U!GiRagb&bTG?dN=FK>fWpKny&b5VBr?iiP(_92__E; zf!GI|RKX;xH;B#3Jq=8X>44ZkWe}1U8h^>_{J!Bk|MWxQYirxKuGu}iZuKkiYq4uM z*T}4nOL!V_e?!q4yEQV|Y}&_Hg-0k}+wn>|tYfRntHWFy?N+62a9ZY`Q&5T1ECcaz0)m}WNc-#4M@ttS* zFZ>DpCYsPHeO7%<9^-Krm)!>!>++_o`Nwsmty<(|hSu-w16IQJwzu1BOMV}YlZ`kX z>XvC%FvsZnU!`QbJLlFcWLqQr@_mGIUb1oAhmFaKOQ+n92%fd+wW`^2<89v_D&0BW zl&c>s8ez+|#^!#DK$OJ>y}uXJ@;=W$`84iahvhGhCbQ{Dyb+a`wKlH1!Th%Gs(9}7 znE8fxR-3I~%;;M-|6`a%OEKMloPz~!T{390@ob>dc%c+eMv&+1vCbUjnc;M9I*%8&} zC%o3IXD@m^!FpNLhO}kVH-7uIW&QOj`>hWhTPe1t@u_jx_s4JFzI`mY=GjEqj-ONR zEn3OC+BG_Vb@-8cca>whm~s>7be!F z9N%yuq-Cl^*_xJrtZVpURi5!zID`v^rQF*n)*`-vY1Yq+1xjD)Bqq9-$}~mU|-kz)lbIsfn#$4{-gRC0}>+dW3cE&Kj#DOq9uHU;js*@3FtVkXeW!L4qwIwIJaiul%wFOhTL!RlUVFrJS5J l$SBuqc3jnwQzmgP{TcnGpmEJ-OMOrQ>gnp|vd$@?2>`7JV6y-K literal 11055 zcmeHNeNYp38qS9VD@J;E#dv~p?e)$ZwZw`d&?wgr$Ll!*_oYk^S(tG;XaS*(K*CoN zJ+D)_(!Z{>h~dVLml+)!N2W$3F{_r^E8?DIynrZK;z)`}v$%XD5R!Y}-zG{C>D?dq z&rL=hXR_JNyU*`=pXYghyYKxbbDMn8@JF=&l@pK6l?|p&Yt+x-r;q&)&A2!G? zEYhqHo8|tcTsmE%hVSK$Wporu?NQcxy+c+TqglaPT7|3K{mkH$P}^v7bP3lRy6l6S zbcxvfQFx@ zQY}3svUfrqWjBIrg~Eig%k<80*+OBFvLk3mND^sD)R~BqM07i1H(>4&m&B+O$t3@; zQEIi`ETay)$CBx6-oxjp%pZsYjTj<*j|EP#KZX0F%ACtSOD6@(2eh_OW@VV!`F0U& zF*sblsRXvgXGvy;LQPaz`&cX$+2z)yj5CRQI=?{|&s(Wb1arG*hvO)&mo6MRP_u;V z@%Mh@9t*|m%^9;Z?P|SKM%5{b6q<#nJM2a+We%lfo}ZnpCEjB8Gfn@NXm3$q>?&Uw z%I3!A*?~BYE|HqsV=OVM1>JY^uBgmmgM0!?{tj}@vhTm9dU6GnkZF;`_WuXhRhbxZ zU%cjNX0S%@8Q5B2bcDkFnE$asKvWyAdBND_7Fi_DcJ=u<%|d0m0B~TKiqWj&^4a5t z9Qb3G8O680($(Lgw~1qA^-{aMS{_XCL|Hd*U&DRpN$)>6R<#Dce23mHwMg(!hV=eB zH-bCohTc7zMi;;rV_j*sSnjrUkAQ;DF}0Tc#Bj%2njx=VT)HNhZf{pl#c){W!}QTo6Yj-r3{?aJPXrh zbZe`t1<^!k!gU1C+@bTtu>;y^`RN!?fSdF|L-dFro8RAYm7gqRk83Z&%3&vE>g3i9 z%5GdVzOsaE(*%;ly3Ur(%Yd=Y3aRIE%-NWPJ8AFfdJY;)yuW5Kcf;RNyIixz*!5I? zL$LV?@-V2@GXsb3(5L7Zja^eBXJ<@^`1boIy=6d)*HM{0vc5Xhu^e8Rth|-1_sI4| zl^YslTaLKLh;-yiF2tXU^A^Hn4ae@LZC>VG!=^HWKjf~{6#!Jc7uiRZNc|faXO^_2 zU5$dE?eB~CCK>I`;=V>*&sI2Ld=uarbj&S!X(&*t-U4ZJsOOr5LBgJW~6TV}JgI)y1uI2V`tg}O44ZPQ*9`cd02urpcTAS>5i zq?UWv2yz1G+CLCqXjI%r(c@8|wAVolvIW`G^}NmQWS236yY*%;0sP#A;3&R*uCz&U zAGJQJs*p8lG7-t3&Nh38;-N4#cd93g*cL(kqC!4#Xo}pXU207Up0T4hp`7rSK6a12 zL>KaA9@o;kQgZ97x`8&sgez^c6#JH}{-}fQ;QYgqE1I)8hIhFGq_|#ZY5Vq(qC9Ce zP!pQ9U7aqz|6u<0GtD3yA0k`K#7+49roeLVURWfwEyBw~P&f8fo*P$@tcCTPB*_&m z0bY5&K^6deT~FunRzZ+~>241yP|t|%qqH{)wv{9)ci7yMQKl1Ci!S2#-UU2TOx}!PJyiI-4-hD;~;b>(%YtjbD zmxp(sa{<9t>2r-4Jkhd%u4?wKlMn*HhM=v=W{`>!@_^s%BP)ueQ--OZ{s^tDd>>sg z(v&2=0(L+o!wDkG41rn$cGx<)fi&CVY!orHxDdZA;@ZZb6Zy){+|&}%16c;&6!~2c zpv6pwK-8d0P(4%+TqR^?c$J7<2uONF=1zMb0fSIIaFuwnmMQ@cV#=RNy%yI7!ZTc@ zpMY}E5KKRU0A!z!*L+0?8WfPs5Hv%!rJ$a$n}|lrAM=6UYWu_9=p$ed*cypKj1sm_ z^w0$(P5Yu&Ug9T^_(g5>Q$`1}xMg}V_peePa0YapE z6#a+vUG{uf#e}s9u}TTi_f4g|I*z;PpF&PpOT!3~1WL%K=tOZMrsZ=WOEr|sNB+;m zI+*c%c2H${S7dpo{cZL+L9Eg~c8{jeS?U|}NVm0AAPqEge@|E_>!n%I_53Apzz%ig zI_@W!s+u3U(6xu9XsS#M{W=*kR;SNW*lUDqzUzG z$9!#nX+`wDsQQs63Ip;wfy{@dUI1yP7!eS8FRBVL@Bap|DAI#xL1zD4FtwLGr8$dn z!#zq^_jyZA3ipPpH(4L8juUpNXY64M8K3kl<}uVHfZ=kSuvFH3ycuQ)nJmjoj~5N{IRR%d19;6oxyh-d@Og>PlQ=Vkz1F4ctyu?}W(HxkEG`X3CeA z+*$;A!vq8Q5!5@C+l{0<;eM3x+AdUj!}PkRbIP04K7iN?J^ZjT%ofB{xANZu7+L4(CD0#3 z1SpeJOdU~NQ<=cFmqWg7(VWFk+#Zv`;_3nQkf@ev(wV_$=~KI+geM3yo-YVfkYHDh z7%0Fh;M+tm!>;_jB_X%dh9#@KGh|(P3mbz76`7w}NKn&xz+q8_b?RBY)2usfDAk^^ZVJ01R+Q&2q3`)S`n?; z4-pmcDTXMtrLJIVC2MQFS34iIj#aJW_M;0Q6nMorw@Y>HJSK}{tqT(%lRZhdj%uky zjBqe5nF%ZMo)bB56ePfX!=zVo1GMvSswLsr{` z>=kx8qJU;JYG4K#SanAQ8ArY!o7%_Pgygk#0!^d|g$V|YOfX~xGmcV!sb(YhTUD<| zq>M^%_YjGiK#Bd%W2hN{Kz9_`lQ)j{bO2Krkzz=35~@*1Z-hsUv0UG-v0u(d5%UCCP`HLFsS}cP zFb+$Ynir7GESt879)Ovd&1P{wc7G8;}f?RWdj&3pV7C2u-yzO<|x6l>HaR zt}CLv&K=C~Y`q+_|D#YED_eOr&LYvt{TqXJQ2avnRI4lXbVr;{UcHHP>>9H_mV6>l zq91eV$OH7*JryBIgd~xdLqbm`BCq1Wt4)zNh$8Q6MP4(5@nFV=NW>*0F8M!q$wbKZ z;Ws}wz^ov=`5AsawQNB`G)11?p9uB@CKJWQq6e#Xy=r*{UW66BzBTi;PhZJD@NenE BiJbrd diff --git a/crates/resvg/tests/tests/text/font-variation-settings/wght-100.png b/crates/resvg/tests/tests/text/font-variation-settings/wght-100.png index 685b8087bac6c3f9a1849ad2206a65955f165234..29de617c38abf3afac68c64866345b74bce06f89 100644 GIT binary patch literal 795 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4rZW;-{LxV5EbAP;tHgx2#zdT76~*?vLwha z*nvSn!N5KsJ|VxLzG1@r1?xBLKXCs3gZCeHFi)7tz`&I3>EaktaqI21P^L!)3=RiP zc0}ubw}0VPc>ccE^M?VRY}p;ksbbC^Gc{W#JX2IYYrQ5QWeEefm`=oogxDrkAbGHf z)f-H5PXn=mQV=o%%#PT=0#VEf)^bn?r12m%HEx}M$SSyIRkD|N#B#p!rN7=OuHoO? z^0UXZVQO#aGQ%}7Yo`2HZ8eQ^i;#?vZw9#!0bVM@8S2P&CA}3ai8|hQu}+P>vmPt9Pail zb)8pr#pK0a%ZBNci#MNB?Tt@7`l(?14L#rLj?lcW-E6sExw8Lnh{##}FVS@OqlJ}H zcFCsg$B!<{ykWh@%C0}}U(eNjF=rezeNLyZxxV_4)~!&nu)WP+y`N2JEwwlR4MAwI zLc$vC{(tMhVgnQ4grfM8WVTt5+h#uRnXLlNM&0&|K5Ad4Z4}&TN0<c-lwY`1V3oWWocRm{Lm7 z0-mdzE59K}$#~02odeS(6WR307_aUAg)V2DY%j%)rZSUZwU6&m3Xy3W&5b7bnt@`& zK&Y|3nI6$OUSPOUG*BX~11Q)bh=-aP`tsGiv1|e+#N9#D7#{=VG zx9XfvVDrEP*n+hMClNvt<{2TA2zguBZouX)?2?e`2%O|OqEaDJ1=!%It3_uA1TUnz z6ipG=ejvB=O=f>!!Jk8$+bbbyl&VviiGX9NfW9>5>eRWX46HqdW3u0BGKu`q5`4Do z93Yh^awQ4ArjQ&WD4Q%ea%><}4zWGOV}sJgX8MB9?cGT=di$YLqc4jd@|)%W)%EmW ztzz}DGZ-n722zeBk^@`Q4xeAv5)PwP=BIYF{QFJ7i*%h$QH_*E&rSW#W=J-J9)!5Zk zd}{P%(--`wykG^C)(42**3wbL$S4(>Hszm;*JOg#HTfMX1$}AM1#72nUTh^~g}C}f z=2uF2hOFswViN53eFIw&>t;3IgXqWxRU}{8 zt*HCv$nG&$o6a#+ehbusRkEdXN}4i6q|-gv@LDwp=$7my;5}L2+47c(D%)^)#xs(q?~O zX9-hX>nVjgc~L^ODXj~L+eY4MMDRO%XKB!g!x{vGKHVq#mmVq@lVyQfv05of0u2!vxciR zaR%#>YYR+6F0Od}Z+-FhnY|M}+`RFBP0RNSddEM`Jhfmh-@fO{cjq5n)!uG5dzq!@ zuTt9kF1kV#vWmy^|bRxy^-EB|P*wXw|n>U|oV_;p%NNt2jb8 z95VfK#?E_3lW6Sc54EB?v$(DmuDK^an31=kpWT(8C`M&If(AwmtTDF9Z`KSKfHCW@(?GsbOXma$@ z!}j$buPWYIG22c8(8v9OIANyvqA4{`SixcVLyMA zzWVHYGI;Y5VTSH!FM2j#%XhwafAgc`erxwkSL_Hi)JWI)@RQ4*LFZLG@99fnXE)6I zw&BSs{+n|)hB*f&J>Ak*w$Woff0$DInytYl)3^M&5F>c#ljiZjHlw3O>s-Y{%6i+g zlsZILsp;pNK5h8AdrM~Z^O);llloLvf74bxZEyAWI$x{^0}l%W!>s84`>eSOzO{0k znV{-DO$U@E1{1X!=&EbwW)DtB_C`$0%{(H;!1#*c*)HXbGEi~j>FVdQ&MBb@08X3- At^fc4 literal 9609 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 diff --git a/crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.png b/crates/resvg/tests/tests/text/font-variation-settings/xtra-extreme.png index d4983ae87344ef96fdcb713a3cff293c18353f78..81a24d16867ccbe12beeb0fac2f8e0cf37f34f44 100644 GIT binary patch literal 1659 zcmd6o{WsGK9LK*bJuGH-ArBL$tQ$t|7}w*SF1lM{&19Z38yA(Q5vKBx2w^U5Lf1oA zE%}NGms_5nvgsh!a4{+hX_@1ph^zjGd+z<5^FFV0KIeQspZ8DiPa4tbqykhO3IKot z{uetE0LY-fYA69m)1P{5J}gmm9pZS2L32o{Y{LL`>P2gJU(iM8e(GG`IbaVV zpO2Y^sGVDJO*Kux%2tlGKVMShR*qlg;lX`W($-@&PY_`1gs?y0t{QIA zd*tO+v6w%4qlZJDSUz<~V6_s~$aRP11t6)ZE%p^r z!ZyCai0Cbyx2Nk4k@xh8c!hqF&~$l@H6e4=;!kDV-%!vDa0pkkF$IQlc%3FFkA|_W z0BRp~RHX!(3=+e^V^I>xtl=xvz-NCtGk@FTI(OIZ(G9Nr%WO+zp?ab}u-b0IYlg4{ z-FmBs4V8`fBkt24?}?y^H7DuuO~_Z+Pu07hKA43q8ZsVl8k^e`nj#oU6sf_0IC=yi-W#6Y+6S(!pUF?AE1xE?TqcL~ za^3*ztm^sWRPz$A1$_DDRIN*jb{^6SL82`tu6IRu_)bu;I1ff{eKe94_&5vI4_~G* zN~@Igby3E_l95BlN9HL~`5#!QBMla4-c_5b?#qb#+HR$tgz?uWH6F$=9T(g(XA*3q zf|%vYyE2#{t*?0E(<)ToL`$>tI+n@=8q+w1*%;{l#7nk;m7EIOK4;ieC2^s&PS8WB z)QR9@WEc0I{;h}LUD2dCJG5BcxaS?4{Z6YCtKZ7N6iG}7b%jmtYk*br2qMmecUpTXR7S@(hQMFS`L3w_gf`~m* z`S>n9%p`ud_^3K1i(RiBCb*I?f_-A`vsX4=w?HsKHt3S*x zfp%F`gOnhCAK~{lgffk3Fcas32gx=Z()l~>vCYvvn~zu_8`8Sl7F&92pN{lR(-#<7 z;WhEigL46vkwgfv7b269EJ60QI3tvhp&t9L>U>SMn(S`@_y0iL_unk}t-uD%^zACk a;Sqpu$ywSgYQ_EQ3&Gnv**!Wzz4i|@4BJuw literal 10424 zcmeHNeNYo;8c$dVEg0z4(kLLby>t3uOKb&24KUu-dOc>~`k{82*fY`{`r>$0^!r>|9v93qO7VrC=fiMdhz*9 zuad$kium|9+dnw#^dGwR?pNoV_h%Ni6%Tze_ixW%bszk}pnGo3W7oXp?XOq-_sERtYLBAf{#Nf5V#bOYobWJx4-f|}%)B&DWp z4iJx{%6D3P>nZ|dql-&hMm|{}Aw?yt{AFFBA7#?g0sjjD+R!Z;skOV(s6%X`nH>SsWp3)UdJj>`#uYTg^ZFVIyIWmJuB!AOSW``%7XWc2( z7B+D*wd8%fYaNxz8WWbtKC+*Tl!XpnR_Q>F*4kILP1}B2tdPS>Rxyw0toIja{i#wh z7b6{PrGDqBca2booW^vK=XITR3z6T;x7?%WRn-v^R6NFY%r;pwstA={EAoL`&r&(83QbBsld+1A4We|o zZ!MM0D%?2XSptXnFrO`MsA?^A^wQsP3&;Zm5F=ML2vPGsAaRbu7>XK@zLn|74OldBo4 zY{OfaAc>SmV`Bg=C1iwai9T z+kA`pW=A67@Fz86+~lPQ_$>|1thHAbx1H63dZ)*_#xhx?t{>mb4pBvr%W$&T=Sq+C z?DdURt%IkwqUjnc%3ooC0D-YGE}2QEl5)Bp3BWtM9Y;AWwBv7*;annv53OYa_tCk?c!nhjhW=8V+yVOT+!CO=>k8zs0Tl^15`&6>fKT00)r84A8wA#=U0 zaNZhCcv)`|5iJ^tO+CxHhp9@|c&7GRC$w;v5Bf1CD)E=!U+e$I$IL+092iB zD4_YnE{4@X9mSH%Ga%vZ0Gn>9C zrCT*_k-S#&E_nfRFd|c#h{J1{A#Nx>ygQCurL*P}2IA`e0RoZH9m@>)dk#!O5766u zJ9#WZCGMTsM|Y9($JKcYuWnxGL`Ik~#bUz+Ys)2U;`p(@EcJg@FX}#Gca*6u;~8fw z30p5a9Z#P)bwv}!4>7_K4A z@K&NftY-`8PK|XmY^n58DLp}z>Z~&Yn_2Zwe5lVOjY~>ao( z9nR|QsZfbEfNo(MqjvnLOe4tEe&tADEgHb|}-po!L3MKdGZIm}Kd#L~fRLID_-KzDhqGsW~tGRs65 z*GdQTg;I0bm!a|Y3>%Lub9drPdY(gagvP~%>|2S2#U4p&59==Ua(&U2RQaG@-Q-%~E!V&?CU@A!&EF;dF$@g{bu z+s8K_!dI8mtx7o$Tv$Ggw?ikapN(R^m#L7qmdPr$WBy`h*73qU=%~IJ=zb1Sxa#Qn>Lyttj zsp{sbTK*}PI^E%`e=;v5oszwXw)U6vtN@V`@i1W#D9k3y z0(64gpU_#+5?s}G>p++XTreb*4XB#oBCO>X6rAZS-~1pj)XhXRfWs1IfSb7#A$!~Y zd1RA-4;5;oI}D9rjRcnete)@Vkn(6D zVzy`&3t*cFSO`;AVxc7UED~zRlv$WFtLGah|0c3)EZ2Z5jVcqoIf*3q$WxutnZ5K0 z(g(?m^%X)9yh4?>LB0#sd2L@J$i4GLO8(?gjbSwZCK_rI$B=%@F9%4lIc_%%0(BM4 zOm>)G46xQzb!kQE5u`$%47c)x=&O!{5f)+(;_L)aixSSU0W{)WVEiQNQOPwl$>_%@nnfd)iW?z*GZ5)0TvQQQM_(UZ8TE zZ{Pv4ZyI%659;9sNA+*$(||ZQ;wLiz%0SC}XkQ8HJJz$8UgkdqK&t@qt=JdHO|@t` z@^&H?9l4chS-#=hF8&Jvk1!F)1^KTl1>$hLh`YreZb}>o^YkToL5PVA?1i;{@ z9KkP8g74Pu99e^(DJ|Xx1{GkyUgQ6vND{?d%B@fEl9_?It@W+%1P_MBhszuIZ}Ber erW1uB-WMK!@BQf__##p8;^wU9+kRW{#{U2~MNS|9 diff --git a/crates/usvg/codegen/attributes.txt b/crates/usvg/codegen/attributes.txt index bbc15b31c..3ed557d77 100644 --- a/crates/usvg/codegen/attributes.txt +++ b/crates/usvg/codegen/attributes.txt @@ -40,6 +40,7 @@ font font-family font-feature-settings font-kerning +font-optical-sizing font-size font-size-adjust font-stretch diff --git a/crates/usvg/src/parser/svgtree/mod.rs b/crates/usvg/src/parser/svgtree/mod.rs index 5b4c12b25..5aeadb33c 100644 --- a/crates/usvg/src/parser/svgtree/mod.rs +++ b/crates/usvg/src/parser/svgtree/mod.rs @@ -710,6 +710,7 @@ impl AId { | AId::FloodOpacity | AId::FontFamily | AId::FontKerning // technically not presentation + | AId::FontOpticalSizing // technically not presentation | AId::FontSize | AId::FontSizeAdjust | AId::FontStretch @@ -787,6 +788,7 @@ impl AId { | AId::FloodOpacity | AId::FontFamily | AId::FontKerning + | AId::FontOpticalSizing | AId::FontSize | AId::FontStretch | AId::FontStyle diff --git a/crates/usvg/src/parser/svgtree/names.rs b/crates/usvg/src/parser/svgtree/names.rs index 34ccf7aff..d2afec152 100644 --- a/crates/usvg/src/parser/svgtree/names.rs +++ b/crates/usvg/src/parser/svgtree/names.rs @@ -205,6 +205,7 @@ pub enum AId { FontFamily, FontFeatureSettings, FontKerning, + FontOpticalSizing, FontSize, FontSizeAdjust, FontStretch, @@ -376,262 +377,264 @@ pub enum AId { } static ATTRIBUTES: Map = Map { - key: 6925680744564340301, + key: 3213172566270843353, disps: &[ - (0, 12), - (0, 1), - (0, 2), - (0, 194), - (1, 0), - (2, 50), - (0, 29), - (0, 15), - (0, 24), - (0, 122), - (2, 164), - (0, 10), - (12, 101), - (2, 22), - (0, 89), + (0, 63), + (4, 146), + (0, 0), + (3, 42), + (2, 197), + (0, 0), (0, 1), - (0, 192), - (0, 40), - (5, 120), (0, 0), - (2, 37), + (0, 0), + (0, 18), + (0, 11), + (1, 20), + (0, 8), + (17, 110), + (1, 112), + (1, 108), + (5, 94), + (2, 128), + (4, 95), + (0, 63), + (0, 96), + (0, 0), + (1, 110), (0, 1), + (40, 30), + (17, 157), + (0, 61), + (0, 16), + (7, 16), + (0, 80), + (0, 107), + (6, 111), + (0, 153), + (6, 202), + (18, 86), + (0, 194), + (0, 0), + (0, 7), + (0, 69), + (0, 5), + (0, 19), (0, 0), - (0, 87), - (0, 47), - (0, 2), - (0, 31), - (0, 10), - (0, 66), - (0, 197), - (26, 127), - (1, 31), - (2, 191), - (51, 163), - (0, 158), - (1, 93), - (0, 10), - (3, 64), - (0, 42), - (7, 142), - (3, 140), - (0, 40), + (4, 65), ], entries: &[ - ("line-height", AId::LineHeight), - ("text-align-last", AId::TextAlignLast), - ("filterUnits", AId::FilterUnits), - ("text-underline-position", AId::TextUnderlinePosition), - ("requiredFeatures", AId::RequiredFeatures), - ("shape-margin", AId::ShapeMargin), - ("points", AId::Points), - ("style", AId::Style), - ("stop-opacity", AId::StopOpacity), - ("mask-border-source", AId::MaskBorderSource), - ("k1", AId::K1), - ("r", AId::R), - ("flood-opacity", AId::FloodOpacity), - ("font-size", AId::FontSize), - ("filter", AId::Filter), - ("text-decoration-fill", AId::TextDecorationFill), - ("in", AId::In), - ("orient", AId::Orient), - ("text-orientation", AId::TextOrientation), - ("shape-padding", AId::ShapePadding), ("alignment-baseline", AId::AlignmentBaseline), - ("unicode-range", AId::UnicodeRange), - ("marker-mid", AId::MarkerMid), - ("mask-border-repeat", AId::MaskBorderRepeat), - ("stitchTiles", AId::StitchTiles), - ("mask-type", AId::MaskType), - ("href", AId::Href), - ("z", AId::Z), - ("font-stretch", AId::FontStretch), - ("fr", AId::Fr), - ("shape-subtract", AId::ShapeSubtract), - ("mask-position", AId::MaskPosition), ("fx", AId::Fx), - ("values", AId::Values), - ("pointsAtZ", AId::PointsAtZ), - ("fill-opacity", AId::FillOpacity), - ("diffuseConstant", AId::DiffuseConstant), - ("cy", AId::Cy), - ("font-variant-caps", AId::FontVariantCaps), - ("stop-color", AId::StopColor), - ("y1", AId::Y1), - ("white-space", AId::WhiteSpace), - ("in2", AId::In2), - ("glyph-orientation-vertical", AId::GlyphOrientationVertical), - ("mask", AId::Mask), - ("font-style", AId::FontStyle), - ("color-interpolation", AId::ColorInterpolation), - ("flood-color", AId::FloodColor), - ("path", AId::Path), - ("exponent", AId::Exponent), - ("text-decoration", AId::TextDecoration), - ("id", AId::Id), - ("lighting-color", AId::LightingColor), - ("primitiveUnits", AId::PrimitiveUnits), - ("rotate", AId::Rotate), - ("rx", AId::Rx), - ("kernelMatrix", AId::KernelMatrix), - ("color-profile", AId::ColorProfile), - ("text-rendering", AId::TextRendering), - ("text-indent", AId::TextIndent), - ("font-variant-ligatures", AId::FontVariantLigatures), - ("clipPathUnits", AId::ClipPathUnits), - ("font-family", AId::FontFamily), - ("mode", AId::Mode), - ("transform", AId::Transform), - ("visibility", AId::Visibility), ("targetY", AId::TargetY), - ("x2", AId::X2), + ("clip-path", AId::ClipPath), ("lengthAdjust", AId::LengthAdjust), - ("font-weight", AId::FontWeight), - ("kerning", AId::Kerning), - ("clip", AId::Clip), - ("mask-border-width", AId::MaskBorderWidth), - ("shape-inside", AId::ShapeInside), - ("text-decoration-color", AId::TextDecorationColor), - ("width", AId::Width), - ("stroke-linejoin", AId::StrokeLinejoin), - ("image-rendering", AId::ImageRendering), - ("azimuth", AId::Azimuth), - ("font-variant-position", AId::FontVariantPosition), - ("elevation", AId::Elevation), - ("pointsAtX", AId::PointsAtX), - ("text-overflow", AId::TextOverflow), - ("color-interpolation-filters", AId::ColorInterpolationFilters), - ("font-variation-settings", AId::FontVariationSettings), - ("spreadMethod", AId::SpreadMethod), - ("stroke-opacity", AId::StrokeOpacity), - ("scale", AId::Scale), - ("enable-background", AId::EnableBackground), - ("k4", AId::K4), - ("height", AId::Height), - ("inline-size", AId::InlineSize), - ("numOctaves", AId::NumOctaves), - ("k2", AId::K2), - ("dy", AId::Dy), - ("systemLanguage", AId::SystemLanguage), - ("limitingConeAngle", AId::LimitingConeAngle), - ("letter-spacing", AId::LetterSpacing), - ("fy", AId::Fy), - ("preserveAspectRatio", AId::PreserveAspectRatio), - ("targetX", AId::TargetX), - ("text-decoration-style", AId::TextDecorationStyle), - ("stroke-linecap", AId::StrokeLinecap), - ("font", AId::Font), - ("font-kerning", AId::FontKerning), - ("x1", AId::X1), - ("preserveAlpha", AId::PreserveAlpha), - ("refY", AId::RefY), - ("glyph-orientation-horizontal", AId::GlyphOrientationHorizontal), - ("intercept", AId::Intercept), - ("clip-rule", AId::ClipRule), - ("overflow", AId::Overflow), - ("paint-order", AId::PaintOrder), - ("font-feature-settings", AId::FontFeatureSettings), - ("y2", AId::Y2), - ("font-variant", AId::FontVariant), - ("ry", AId::Ry), - ("vector-effect", AId::VectorEffect), - ("amplitude", AId::Amplitude), - ("mask-origin", AId::MaskOrigin), - ("markerUnits", AId::MarkerUnits), - ("marker-end", AId::MarkerEnd), - ("baseFrequency", AId::BaseFrequency), - ("mask-composite", AId::MaskComposite), - ("maskUnits", AId::MaskUnits), - ("requiredExtensions", AId::RequiredExtensions), - ("patternContentUnits", AId::PatternContentUnits), - ("color-rendering", AId::ColorRendering), - ("baseline-shift", AId::BaselineShift), + ("mask-size", AId::MaskSize), ("unicode-bidi", AId::UnicodeBidi), - ("mask-border-mode", AId::MaskBorderMode), - ("gradientTransform", AId::GradientTransform), - ("yChannelSelector", AId::YChannelSelector), - ("marker-start", AId::MarkerStart), - ("result", AId::Result), - ("writing-mode", AId::WritingMode), - ("divisor", AId::Divisor), - ("seed", AId::Seed), - ("font-variant-east-asian", AId::FontVariantEastAsian), + ("z", AId::Z), ("font-variant-numeric", AId::FontVariantNumeric), - ("isolation", AId::Isolation), - ("specularConstant", AId::SpecularConstant), - ("text-anchor", AId::TextAnchor), - ("display", AId::Display), - ("d", AId::D), - ("font-synthesis", AId::FontSynthesis), - ("stdDeviation", AId::StdDeviation), - ("specularExponent", AId::SpecularExponent), - ("tableValues", AId::TableValues), - ("side", AId::Side), - ("mask-image", AId::MaskImage), - ("text-decoration-stroke", AId::TextDecorationStroke), - ("pathLength", AId::PathLength), + ("clip-rule", AId::ClipRule), + ("font", AId::Font), + ("gradientUnits", AId::GradientUnits), + ("style", AId::Style), + ("font-stretch", AId::FontStretch), + ("intercept", AId::Intercept), + ("mask-border-slice", AId::MaskBorderSlice), + ("y", AId::Y), ("xChannelSelector", AId::XChannelSelector), - ("bias", AId::Bias), - ("space", AId::Space), - ("slope", AId::Slope), - ("shape-rendering", AId::ShapeRendering), + ("numOctaves", AId::NumOctaves), + ("x1", AId::X1), ("fill-rule", AId::FillRule), + ("image-rendering", AId::ImageRendering), + ("surfaceScale", AId::SurfaceScale), + ("seed", AId::Seed), ("mix-blend-mode", AId::MixBlendMode), - ("k3", AId::K3), - ("mask-border-outset", AId::MaskBorderOutset), - ("cx", AId::Cx), + ("path", AId::Path), + ("mask-border-repeat", AId::MaskBorderRepeat), + ("transform", AId::Transform), ("stroke", AId::Stroke), - ("stroke-dashoffset", AId::StrokeDashoffset), ("refX", AId::RefX), - ("markerWidth", AId::MarkerWidth), - ("startOffset", AId::StartOffset), - ("operator", AId::Operator), - ("dx", AId::Dx), + ("text-orientation", AId::TextOrientation), + ("line-height", AId::LineHeight), + ("display", AId::Display), + ("kerning", AId::Kerning), + ("transform-origin", AId::TransformOrigin), + ("shape-subtract", AId::ShapeSubtract), + ("width", AId::Width), + ("stroke-miterlimit", AId::StrokeMiterlimit), + ("dy", AId::Dy), + ("text-decoration-color", AId::TextDecorationColor), + ("white-space", AId::WhiteSpace), + ("diffuseConstant", AId::DiffuseConstant), + ("text-decoration-stroke", AId::TextDecorationStroke), + ("values", AId::Values), + ("font-size", AId::FontSize), ("shape-image-threshold", AId::ShapeImageThreshold), - ("class", AId::Class), - ("markerHeight", AId::MarkerHeight), - ("transform-box", AId::TransformBox), - ("text-decoration-line", AId::TextDecorationLine), - ("gradientUnits", AId::GradientUnits), - ("stroke-dasharray", AId::StrokeDasharray), + ("href", AId::Href), + ("cy", AId::Cy), + ("mask-image", AId::MaskImage), + ("unicode-range", AId::UnicodeRange), + ("specularConstant", AId::SpecularConstant), + ("baseline-shift", AId::BaselineShift), + ("k3", AId::K3), + ("text-anchor", AId::TextAnchor), + ("mask-border-mode", AId::MaskBorderMode), + ("requiredFeatures", AId::RequiredFeatures), + ("color-rendering", AId::ColorRendering), + ("amplitude", AId::Amplitude), + ("mask-border-width", AId::MaskBorderWidth), + ("stroke-linecap", AId::StrokeLinecap), + ("paint-order", AId::PaintOrder), + ("lighting-color", AId::LightingColor), + ("dx", AId::Dx), + ("markerWidth", AId::MarkerWidth), + ("scale", AId::Scale), + ("id", AId::Id), + ("color", AId::Color), + ("in2", AId::In2), + ("targetX", AId::TargetX), + ("direction", AId::Direction), + ("pointsAtX", AId::PointsAtX), + ("stitchTiles", AId::StitchTiles), ("patternUnits", AId::PatternUnits), - ("type", AId::Type), + ("shape-padding", AId::ShapePadding), + ("k2", AId::K2), + ("font-optical-sizing", AId::FontOpticalSizing), + ("k4", AId::K4), + ("vector-effect", AId::VectorEffect), + ("mask-composite", AId::MaskComposite), + ("stroke-width", AId::StrokeWidth), + ("font-variation-settings", AId::FontVariationSettings), + ("mask-border-outset", AId::MaskBorderOutset), + ("in", AId::In), + ("stroke-linejoin", AId::StrokeLinejoin), + ("stop-opacity", AId::StopOpacity), + ("inline-size", AId::InlineSize), + ("mask-type", AId::MaskType), + ("filterUnits", AId::FilterUnits), + ("color-profile", AId::ColorProfile), + ("space", AId::Space), + ("text-decoration-fill", AId::TextDecorationFill), + ("font-kerning", AId::FontKerning), ("offset", AId::Offset), - ("textLength", AId::TextLength), + ("pointsAtZ", AId::PointsAtZ), ("text-align", AId::TextAlign), - ("color", AId::Color), - ("edgeMode", AId::EdgeMode), + ("clip", AId::Clip), + ("y1", AId::Y1), + ("mask-origin", AId::MaskOrigin), ("mask-mode", AId::MaskMode), + ("yChannelSelector", AId::YChannelSelector), + ("font-variant-caps", AId::FontVariantCaps), + ("marker-mid", AId::MarkerMid), + ("shape-rendering", AId::ShapeRendering), + ("text-rendering", AId::TextRendering), + ("fill-opacity", AId::FillOpacity), ("word-spacing", AId::WordSpacing), - ("order", AId::Order), - ("clip-path", AId::ClipPath), - ("patternTransform", AId::PatternTransform), - ("mask-border-slice", AId::MaskBorderSlice), - ("background-color", AId::BackgroundColor), + ("fill", AId::Fill), ("mask-clip", AId::MaskClip), + ("font-feature-settings", AId::FontFeatureSettings), ("radius", AId::Radius), - ("dominant-baseline", AId::DominantBaseline), - ("x", AId::X), - ("mask-border", AId::MaskBorder), - ("stroke-width", AId::StrokeWidth), - ("y", AId::Y), - ("font-size-adjust", AId::FontSizeAdjust), - ("fill", AId::Fill), - ("direction", AId::Direction), - ("stroke-miterlimit", AId::StrokeMiterlimit), - ("transform-origin", AId::TransformOrigin), - ("viewBox", AId::ViewBox), + ("kernelMatrix", AId::KernelMatrix), ("kernelUnitLength", AId::KernelUnitLength), - ("maskContentUnits", AId::MaskContentUnits), + ("mask-border-source", AId::MaskBorderSource), + ("k1", AId::K1), + ("mask", AId::Mask), ("opacity", AId::Opacity), - ("mask-size", AId::MaskSize), + ("markerUnits", AId::MarkerUnits), + ("visibility", AId::Visibility), + ("spreadMethod", AId::SpreadMethod), ("pointsAtY", AId::PointsAtY), - ("surfaceScale", AId::SurfaceScale), + ("d", AId::D), + ("slope", AId::Slope), + ("side", AId::Side), + ("tableValues", AId::TableValues), + ("order", AId::Order), + ("text-align-last", AId::TextAlignLast), + ("font-size-adjust", AId::FontSizeAdjust), + ("rotate", AId::Rotate), + ("shape-margin", AId::ShapeMargin), + ("limitingConeAngle", AId::LimitingConeAngle), + ("font-weight", AId::FontWeight), + ("text-decoration-line", AId::TextDecorationLine), + ("stop-color", AId::StopColor), + ("requiredExtensions", AId::RequiredExtensions), + ("enable-background", AId::EnableBackground), + ("systemLanguage", AId::SystemLanguage), + ("clipPathUnits", AId::ClipPathUnits), + ("stroke-dashoffset", AId::StrokeDashoffset), + ("ry", AId::Ry), + ("overflow", AId::Overflow), + ("class", AId::Class), + ("mask-border", AId::MaskBorder), + ("specularExponent", AId::SpecularExponent), + ("text-decoration", AId::TextDecoration), + ("startOffset", AId::StartOffset), + ("stroke-dasharray", AId::StrokeDasharray), + ("fr", AId::Fr), + ("mask-position", AId::MaskPosition), + ("writing-mode", AId::WritingMode), + ("font-synthesis", AId::FontSynthesis), + ("isolation", AId::Isolation), + ("rx", AId::Rx), + ("bias", AId::Bias), + ("markerHeight", AId::MarkerHeight), + ("edgeMode", AId::EdgeMode), + ("r", AId::R), + ("stroke-opacity", AId::StrokeOpacity), + ("maskContentUnits", AId::MaskContentUnits), + ("height", AId::Height), + ("font-variant-position", AId::FontVariantPosition), + ("operator", AId::Operator), + ("font-family", AId::FontFamily), + ("fy", AId::Fy), + ("dominant-baseline", AId::DominantBaseline), + ("y2", AId::Y2), + ("shape-inside", AId::ShapeInside), + ("letter-spacing", AId::LetterSpacing), + ("azimuth", AId::Azimuth), + ("stdDeviation", AId::StdDeviation), + ("flood-color", AId::FloodColor), + ("flood-opacity", AId::FloodOpacity), + ("type", AId::Type), + ("font-variant-east-asian", AId::FontVariantEastAsian), + ("points", AId::Points), + ("refY", AId::RefY), + ("text-underline-position", AId::TextUnderlinePosition), + ("patternContentUnits", AId::PatternContentUnits), + ("baseFrequency", AId::BaseFrequency), + ("color-interpolation", AId::ColorInterpolation), + ("font-variant-ligatures", AId::FontVariantLigatures), + ("font-style", AId::FontStyle), + ("filter", AId::Filter), + ("text-decoration-style", AId::TextDecorationStyle), + ("preserveAlpha", AId::PreserveAlpha), + ("mode", AId::Mode), + ("divisor", AId::Divisor), + ("cx", AId::Cx), + ("patternTransform", AId::PatternTransform), + ("background-color", AId::BackgroundColor), + ("preserveAspectRatio", AId::PreserveAspectRatio), + ("gradientTransform", AId::GradientTransform), + ("x2", AId::X2), + ("pathLength", AId::PathLength), + ("marker-start", AId::MarkerStart), + ("glyph-orientation-horizontal", AId::GlyphOrientationHorizontal), + ("maskUnits", AId::MaskUnits), + ("textLength", AId::TextLength), + ("viewBox", AId::ViewBox), + ("text-overflow", AId::TextOverflow), + ("glyph-orientation-vertical", AId::GlyphOrientationVertical), + ("result", AId::Result), + ("primitiveUnits", AId::PrimitiveUnits), + ("exponent", AId::Exponent), + ("x", AId::X), + ("font-variant", AId::FontVariant), + ("elevation", AId::Elevation), + ("color-interpolation-filters", AId::ColorInterpolationFilters), + ("text-indent", AId::TextIndent), + ("marker-end", AId::MarkerEnd), + ("transform-box", AId::TransformBox), + ("orient", AId::Orient), ], }; diff --git a/crates/usvg/src/parser/text.rs b/crates/usvg/src/parser/text.rs index 890e8fb1c..3c19294f1 100644 --- a/crates/usvg/src/parser/text.rs +++ b/crates/usvg/src/parser/text.rs @@ -263,6 +263,12 @@ fn collect_text_chunks_impl( apply_kerning = false; } + // Parse font-optical-sizing (defaults to auto to match browser behavior) + let font_optical_sizing = match parent.find_attribute::<&str>(AId::FontOpticalSizing) { + Some("none") => crate::FontOpticalSizing::None, + _ => crate::FontOpticalSizing::Auto, // "auto" or missing = Auto (browser default) + }; + let mut text_length = parent.try_convert_length(AId::TextLength, Units::UserSpaceOnUse, state); // Negative values should be ignored. @@ -284,6 +290,7 @@ fn collect_text_chunks_impl( font_size, small_caps: parent.find_attribute::<&str>(AId::FontVariant) == Some("small-caps"), apply_kerning, + font_optical_sizing, decoration: resolve_decoration(parent, state, cache), visible: visibility == Visibility::Visible, dominant_baseline, diff --git a/crates/usvg/src/text/flatten.rs b/crates/usvg/src/text/flatten.rs index 7ca155bbe..daff86f67 100644 --- a/crates/usvg/src/text/flatten.rs +++ b/crates/usvg/src/text/flatten.rs @@ -131,12 +131,21 @@ pub(crate) fn flatten(text: &mut Text, cache: &mut Cache) -> Option<(Group, NonZ } else { // For variable fonts, we need to extract the outline with variations applied. // We can't use the cache here since the outline depends on variation values. - let outline = if glyph.variations.is_empty() { - cache.fontdb_outline(glyph.font, glyph.id) - } else { + // Also handle auto-opsz for variable fonts. + let needs_variations = !glyph.variations.is_empty() + || glyph.font_optical_sizing() == crate::FontOpticalSizing::Auto; + let outline = if needs_variations { cache .fontdb - .outline_with_variations(glyph.font, glyph.id, &glyph.variations) + .outline_with_variations( + glyph.font, + glyph.id, + &glyph.variations, + glyph.font_size(), + glyph.font_optical_sizing(), + ) + } else { + cache.fontdb_outline(glyph.font, glyph.id) }; if let Some(outline) = outline.and_then(|p| p.transform(glyph.outline_transform())) @@ -202,6 +211,8 @@ pub(crate) trait DatabaseExt { id: ID, glyph_id: GlyphId, variations: &[crate::FontVariation], + font_size: f32, + font_optical_sizing: crate::FontOpticalSizing, ) -> Option; fn raster(&self, id: ID, glyph_id: GlyphId) -> Option; fn svg(&self, id: ID, glyph_id: GlyphId) -> Option; @@ -246,15 +257,33 @@ impl DatabaseExt for Database { id: ID, glyph_id: GlyphId, variations: &[crate::FontVariation], + font_size: f32, + font_optical_sizing: crate::FontOpticalSizing, ) -> Option { self.with_face_data(id, |data, face_index| -> Option { let mut font = ttf_parser::Face::parse(data, face_index).ok()?; - // Apply font variations for variable fonts + // Apply explicit font variations for v in variations { font.set_variation(ttf_parser::Tag::from_bytes(&v.tag), v.value); } + // Auto-set opsz if font-optical-sizing is auto and not explicitly set + if font_optical_sizing == crate::FontOpticalSizing::Auto { + let has_explicit_opsz = variations.iter().any(|v| v.tag == *b"opsz"); + if !has_explicit_opsz { + // Check if font has opsz axis + if let Some(axes) = font.tables().fvar { + let has_opsz_axis = axes.axes.into_iter().any(|axis| { + axis.tag == ttf_parser::Tag::from_bytes(b"opsz") + }); + if has_opsz_axis { + font.set_variation(ttf_parser::Tag::from_bytes(b"opsz"), font_size); + } + } + } + } + let mut builder = PathBuilder { builder: tiny_skia_path::PathBuilder::new(), }; diff --git a/crates/usvg/src/text/layout.rs b/crates/usvg/src/text/layout.rs index cacb5d209..003a0f392 100644 --- a/crates/usvg/src/text/layout.rs +++ b/crates/usvg/src/text/layout.rs @@ -47,9 +47,21 @@ pub struct PositionedGlyph { pub font: ID, /// Font variation settings for variable fonts. pub variations: Vec, + /// Font optical sizing mode for auto-opsz computation. + pub font_optical_sizing: crate::FontOpticalSizing, } impl PositionedGlyph { + /// Returns the font size for this glyph. + pub fn font_size(&self) -> f32 { + self.font_size + } + + /// Returns the font optical sizing mode. + pub fn font_optical_sizing(&self) -> crate::FontOpticalSizing { + self.font_optical_sizing + } + /// Returns the transform of glyph. pub fn transform(&self) -> Transform { let sx = self.font_size / self.units_per_em as f32; @@ -902,6 +914,8 @@ fn process_chunk( span.small_caps, span.apply_kerning, &span.font.variations, + span.font_size.get(), + span.font_optical_sizing, resolver, fontdb, ); @@ -961,6 +975,7 @@ fn process_chunk( &chunk.text, span.font_size.get(), &span.font.variations, + span.font_optical_sizing, )); } } @@ -1136,6 +1151,7 @@ fn form_glyph_clusters( text: &str, font_size: f32, variations: &[crate::FontVariation], + font_optical_sizing: crate::FontOpticalSizing, ) -> GlyphCluster { debug_assert!(!glyphs.is_empty()); @@ -1167,6 +1183,7 @@ fn form_glyph_clusters( text: glyph.text.clone(), id: glyph.id, variations: variations.to_vec(), + font_optical_sizing, }); x += glyph.width as f32; @@ -1292,6 +1309,8 @@ pub(crate) fn shape_text( small_caps: bool, apply_kerning: bool, variations: &[crate::FontVariation], + font_size: f32, + font_optical_sizing: crate::FontOpticalSizing, resolver: &FontResolver, fontdb: &mut Arc, ) -> Vec { @@ -1301,6 +1320,8 @@ pub(crate) fn shape_text( small_caps, apply_kerning, variations, + font_size, + font_optical_sizing, fontdb, ) .unwrap_or_default(); @@ -1333,6 +1354,8 @@ pub(crate) fn shape_text( small_caps, apply_kerning, variations, + font_size, + font_optical_sizing, fontdb, ) .unwrap_or_default(); @@ -1391,29 +1414,60 @@ fn shape_text_with_font( small_caps: bool, apply_kerning: bool, variations: &[crate::FontVariation], + font_size: f32, + font_optical_sizing: crate::FontOpticalSizing, fontdb: &fontdb::Database, ) -> Option> { fontdb.with_face_data(font.id, |font_data, face_index| -> Option> { let mut rb_font = rustybuzz::Face::from_slice(font_data, face_index)?; + // Build the list of variations to apply + let mut final_variations: Vec = variations + .iter() + .map(|v| rustybuzz::Variation { + tag: Tag::from_bytes(&v.tag), + value: v.value, + }) + .collect(); + + // Automatic optical sizing: if font-optical-sizing is auto and the font has + // an 'opsz' axis that isn't explicitly set, auto-set it to match font size. + // This matches browser behavior (CSS font-optical-sizing: auto). + if font_optical_sizing == crate::FontOpticalSizing::Auto { + let has_explicit_opsz = variations.iter().any(|v| v.tag == *b"opsz"); + if !has_explicit_opsz { + // Check if font has opsz axis + if let Ok(ttf_face) = ttf_parser::Face::parse(font_data, face_index) { + if let Some(axes) = ttf_face.tables().fvar { + let has_opsz_axis = axes.axes.into_iter().any(|axis| { + axis.tag == ttf_parser::Tag::from_bytes(b"opsz") + }); + if has_opsz_axis { + log::debug!( + "Auto-setting opsz={} (font-optical-sizing: auto)", + font_size + ); + final_variations.push(rustybuzz::Variation { + tag: Tag::from_bytes(b"opsz"), + value: font_size, + }); + } + } + } + } + } + // Apply font variations for variable fonts - if !variations.is_empty() { - log::debug!("Applying {} font variations for shaping", variations.len()); - for v in variations { + if !final_variations.is_empty() { + log::debug!("Applying {} font variations for shaping", final_variations.len()); + for v in &final_variations { log::debug!( " Setting variation {:?} = {}", - std::str::from_utf8(&v.tag).unwrap_or("????"), + std::str::from_utf8(&v.tag.to_bytes()).unwrap_or("????"), v.value ); } - let variations: Vec<_> = variations - .iter() - .map(|v| rustybuzz::Variation { - tag: Tag::from_bytes(&v.tag), - value: v.value, - }) - .collect(); - rb_font.set_variations(&variations); + rb_font.set_variations(&final_variations); } let bidi_info = unicode_bidi::BidiInfo::new(text, Some(unicode_bidi::Level::ltr())); diff --git a/crates/usvg/src/tree/text.rs b/crates/usvg/src/tree/text.rs index 4ca63f000..c1739b901 100644 --- a/crates/usvg/src/tree/text.rs +++ b/crates/usvg/src/tree/text.rs @@ -257,6 +257,24 @@ impl Default for LengthAdjust { } } +/// A font optical sizing property. +/// +/// Controls automatic adjustment of the `opsz` axis in variable fonts +/// based on font size. Matches CSS `font-optical-sizing`. +#[derive(Clone, Copy, PartialEq, Debug)] +pub enum FontOpticalSizing { + /// Automatically set `opsz` to match font size (browser default). + Auto, + /// Do not automatically adjust `opsz`. + None, +} + +impl Default for FontOpticalSizing { + fn default() -> Self { + Self::Auto + } +} + /// A text span decoration style. /// /// In SVG, text decoration and text it's applied to can have different styles. @@ -320,6 +338,7 @@ pub struct TextSpan { pub(crate) font_size: NonZeroPositiveF32, pub(crate) small_caps: bool, pub(crate) apply_kerning: bool, + pub(crate) font_optical_sizing: FontOpticalSizing, pub(crate) decoration: TextDecoration, pub(crate) dominant_baseline: DominantBaseline, pub(crate) alignment_baseline: AlignmentBaseline, @@ -385,6 +404,15 @@ impl TextSpan { self.apply_kerning } + /// Font optical sizing mode. + /// + /// When `Auto` (default), the `opsz` axis will be automatically set + /// to match the font size for variable fonts that support it. + /// This matches the CSS `font-optical-sizing: auto` behavior. + pub fn font_optical_sizing(&self) -> FontOpticalSizing { + self.font_optical_sizing + } + /// A span decorations. pub fn decoration(&self) -> &TextDecoration { &self.decoration From e12b42452797025377f2f4a26432a54e10c5460c Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Wed, 7 Jan 2026 21:00:54 +0100 Subject: [PATCH 08/10] Fix cargo fmt formatting issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- crates/usvg/src/text/flatten.rs | 23 +++++++++++------------ crates/usvg/src/text/layout.rs | 12 ++++++++---- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/crates/usvg/src/text/flatten.rs b/crates/usvg/src/text/flatten.rs index daff86f67..ab5e24e4b 100644 --- a/crates/usvg/src/text/flatten.rs +++ b/crates/usvg/src/text/flatten.rs @@ -135,15 +135,13 @@ pub(crate) fn flatten(text: &mut Text, cache: &mut Cache) -> Option<(Group, NonZ let needs_variations = !glyph.variations.is_empty() || glyph.font_optical_sizing() == crate::FontOpticalSizing::Auto; let outline = if needs_variations { - cache - .fontdb - .outline_with_variations( - glyph.font, - glyph.id, - &glyph.variations, - glyph.font_size(), - glyph.font_optical_sizing(), - ) + cache.fontdb.outline_with_variations( + glyph.font, + glyph.id, + &glyph.variations, + glyph.font_size(), + glyph.font_optical_sizing(), + ) } else { cache.fontdb_outline(glyph.font, glyph.id) }; @@ -274,9 +272,10 @@ impl DatabaseExt for Database { if !has_explicit_opsz { // Check if font has opsz axis if let Some(axes) = font.tables().fvar { - let has_opsz_axis = axes.axes.into_iter().any(|axis| { - axis.tag == ttf_parser::Tag::from_bytes(b"opsz") - }); + let has_opsz_axis = axes + .axes + .into_iter() + .any(|axis| axis.tag == ttf_parser::Tag::from_bytes(b"opsz")); if has_opsz_axis { font.set_variation(ttf_parser::Tag::from_bytes(b"opsz"), font_size); } diff --git a/crates/usvg/src/text/layout.rs b/crates/usvg/src/text/layout.rs index 003a0f392..acee0d2ff 100644 --- a/crates/usvg/src/text/layout.rs +++ b/crates/usvg/src/text/layout.rs @@ -1439,9 +1439,10 @@ fn shape_text_with_font( // Check if font has opsz axis if let Ok(ttf_face) = ttf_parser::Face::parse(font_data, face_index) { if let Some(axes) = ttf_face.tables().fvar { - let has_opsz_axis = axes.axes.into_iter().any(|axis| { - axis.tag == ttf_parser::Tag::from_bytes(b"opsz") - }); + let has_opsz_axis = axes + .axes + .into_iter() + .any(|axis| axis.tag == ttf_parser::Tag::from_bytes(b"opsz")); if has_opsz_axis { log::debug!( "Auto-setting opsz={} (font-optical-sizing: auto)", @@ -1459,7 +1460,10 @@ fn shape_text_with_font( // Apply font variations for variable fonts if !final_variations.is_empty() { - log::debug!("Applying {} font variations for shaping", final_variations.len()); + log::debug!( + "Applying {} font variations for shaping", + final_variations.len() + ); for v in &final_variations { log::debug!( " Setting variation {:?} = {}", From c20b17689d7e9bbaf81ee933e9230bb42c6c8771 Mon Sep 17 00:00:00 2001 From: Tobias Oetiker Date: Mon, 12 Jan 2026 20:31:38 +0100 Subject: [PATCH 09/10] Address PR review feedback for variable font support - Move variations and font_optical_sizing from PositionedGlyph to Span (these are uniform per span, reducing memory and simplifying the API) - Add cached has_opsz_axis check to only bypass outline cache when needed (fixes issue where cache was rarely used due to auto opsz default) - Use rb_font.tables().fvar instead of re-parsing font with ttf_parser - Remove unnecessary log::debug! messages - Remove empty --drop-tables flag from README Co-Authored-By: Claude Opus 4.5 --- crates/resvg/tests/fonts/README.md | 2 +- crates/usvg/src/parser/converter.rs | 14 ++++++ crates/usvg/src/text/flatten.rs | 34 ++++++++++++--- crates/usvg/src/text/layout.rs | 66 ++++++++--------------------- 4 files changed, 60 insertions(+), 56 deletions(-) diff --git a/crates/resvg/tests/fonts/README.md b/crates/resvg/tests/fonts/README.md index 18d6d1515..d100d9164 100644 --- a/crates/resvg/tests/fonts/README.md +++ b/crates/resvg/tests/fonts/README.md @@ -18,5 +18,5 @@ we can distinguish them from CBDT in tests). Roboto Flex (Variable Font) 1. Download: https://github.com/googlefonts/roboto-flex/raw/main/fonts/RobotoFlex%5BGRAD%2CXOPQ%2CXTRA%2CYOPQ%2CYTAS%2CYTDE%2CYTFI%2CYTLC%2CYTUC%2Copsz%2Cslnt%2Cwdth%2Cwght%5D.ttf -2. Run `pyftsubset RobotoFlex*.ttf --unicodes="U+0020-007E" --layout-features='*' --drop-tables= --output-file=RobotoFlex.subset.ttf` +2. Run `pyftsubset RobotoFlex*.ttf --unicodes="U+0020-007E" --layout-features='*' --output-file=RobotoFlex.subset.ttf` 3. Copy OFL license from https://github.com/googlefonts/roboto-flex/blob/main/OFL.txt diff --git a/crates/usvg/src/parser/converter.rs b/crates/usvg/src/parser/converter.rs index 7f5758ca9..38b1a666d 100644 --- a/crates/usvg/src/parser/converter.rs +++ b/crates/usvg/src/parser/converter.rs @@ -57,6 +57,8 @@ pub struct Cache { cache_svg: HashMap<(ID, GlyphId), Option>, #[cfg(feature = "text")] cache_raster: HashMap<(ID, GlyphId), Option>, + #[cfg(feature = "text")] + cache_has_opsz: HashMap, pub clip_paths: HashMap>, pub masks: HashMap>, @@ -105,6 +107,8 @@ impl Cache { cache_svg: HashMap::new(), #[cfg(feature = "text")] cache_raster: HashMap::new(), + #[cfg(feature = "text")] + cache_has_opsz: HashMap::new(), clip_paths: HashMap::new(), masks: HashMap::new(), @@ -204,6 +208,16 @@ impl Cache { font_lookup!(fontdb_colr, cache_colr, colr, Tree); font_lookup!(fontdb_svg, cache_svg, svg, Node); font_lookup!(fontdb_raster, cache_raster, raster, BitmapImage); + + #[cfg(feature = "text")] + pub(crate) fn has_opsz_axis(&mut self, font: ID) -> bool { + if let Some(&cached) = self.cache_has_opsz.get(&font) { + return cached; + } + let has_opsz = self.fontdb.has_opsz_axis(font); + self.cache_has_opsz.insert(font, has_opsz); + has_opsz + } } // TODO: is there a simpler way? diff --git a/crates/usvg/src/text/flatten.rs b/crates/usvg/src/text/flatten.rs index ab5e24e4b..0a8a130df 100644 --- a/crates/usvg/src/text/flatten.rs +++ b/crates/usvg/src/text/flatten.rs @@ -71,6 +71,11 @@ pub(crate) fn flatten(text: &mut Text, cache: &mut Cache) -> Option<(Group, NonZ // with just outlines (which is the most common case). let mut span_builder = tiny_skia_path::PathBuilder::new(); + // For variable fonts, we need to extract the outline with variations applied. + // We can't use the cache here since the outline depends on variation values. + // Check explicit variations once (span-level, uniform for all glyphs). + let has_explicit_variations = !span.variations.is_empty(); + for glyph in &span.positioned_glyphs { // A (best-effort conversion of a) COLR glyph. if let Some(tree) = cache.fontdb_colr(glyph.font, glyph.id) { @@ -129,18 +134,18 @@ pub(crate) fn flatten(text: &mut Text, cache: &mut Cache) -> Option<(Group, NonZ new_children.push(Node::Group(Box::new(group))); } else { - // For variable fonts, we need to extract the outline with variations applied. - // We can't use the cache here since the outline depends on variation values. - // Also handle auto-opsz for variable fonts. - let needs_variations = !glyph.variations.is_empty() - || glyph.font_optical_sizing() == crate::FontOpticalSizing::Auto; + // Only bypass cache if: explicit variations OR (auto opsz AND font has opsz axis) + let needs_variations = has_explicit_variations + || (span.font_optical_sizing == crate::FontOpticalSizing::Auto + && cache.has_opsz_axis(glyph.font)); + let outline = if needs_variations { cache.fontdb.outline_with_variations( glyph.font, glyph.id, - &glyph.variations, + &span.variations, glyph.font_size(), - glyph.font_optical_sizing(), + span.font_optical_sizing, ) } else { cache.fontdb_outline(glyph.font, glyph.id) @@ -212,6 +217,7 @@ pub(crate) trait DatabaseExt { font_size: f32, font_optical_sizing: crate::FontOpticalSizing, ) -> Option; + fn has_opsz_axis(&self, id: ID) -> bool; fn raster(&self, id: ID, glyph_id: GlyphId) -> Option; fn svg(&self, id: ID, glyph_id: GlyphId) -> Option; fn colr(&self, id: ID, glyph_id: GlyphId) -> Option; @@ -292,6 +298,20 @@ impl DatabaseExt for Database { })? } + fn has_opsz_axis(&self, id: ID) -> bool { + self.with_face_data(id, |data, face_index| -> Option { + let font = ttf_parser::Face::parse(data, face_index).ok()?; + let has_opsz = font.tables().fvar.map_or(false, |axes| { + axes.axes + .into_iter() + .any(|axis| axis.tag == ttf_parser::Tag::from_bytes(b"opsz")) + }); + Some(has_opsz) + }) + .flatten() + .unwrap_or(false) + } + fn raster(&self, id: ID, glyph_id: GlyphId) -> Option { self.with_face_data(id, |data, face_index| -> Option { let font = ttf_parser::Face::parse(data, face_index).ok()?; diff --git a/crates/usvg/src/text/layout.rs b/crates/usvg/src/text/layout.rs index acee0d2ff..07eb0034d 100644 --- a/crates/usvg/src/text/layout.rs +++ b/crates/usvg/src/text/layout.rs @@ -45,10 +45,6 @@ pub struct PositionedGlyph { /// The ID of the font the glyph should be taken from. Can be used with the /// [font database of the tree](crate::Tree::fontdb) this glyph is part of. pub font: ID, - /// Font variation settings for variable fonts. - pub variations: Vec, - /// Font optical sizing mode for auto-opsz computation. - pub font_optical_sizing: crate::FontOpticalSizing, } impl PositionedGlyph { @@ -57,11 +53,6 @@ impl PositionedGlyph { self.font_size } - /// Returns the font optical sizing mode. - pub fn font_optical_sizing(&self) -> crate::FontOpticalSizing { - self.font_optical_sizing - } - /// Returns the transform of glyph. pub fn transform(&self) -> Transform { let sx = self.font_size / self.units_per_em as f32; @@ -161,6 +152,10 @@ pub struct Span { pub paint_order: PaintOrder, /// The font size of the span. pub font_size: NonZeroPositiveF32, + /// Font variation settings for variable fonts (uniform for all glyphs in span). + pub variations: Vec, + /// Font optical sizing mode for auto-opsz computation. + pub font_optical_sizing: crate::FontOpticalSizing, /// The visibility of the span. pub visible: bool, /// The glyphs that make up the span. @@ -357,6 +352,8 @@ pub(crate) fn layout_text( stroke: span.stroke.clone(), paint_order: span.paint_order, font_size: span.font_size, + variations: span.font.variations.clone(), + font_optical_sizing: span.font_optical_sizing, visible: span.visible, positioned_glyphs, underline, @@ -974,8 +971,6 @@ fn process_chunk( &glyphs[range], &chunk.text, span.font_size.get(), - &span.font.variations, - span.font_optical_sizing, )); } } @@ -1146,13 +1141,7 @@ fn apply_word_spacing(chunk: &TextChunk, clusters: &mut [GlyphCluster]) { } } -fn form_glyph_clusters( - glyphs: &[Glyph], - text: &str, - font_size: f32, - variations: &[crate::FontVariation], - font_optical_sizing: crate::FontOpticalSizing, -) -> GlyphCluster { +fn form_glyph_clusters(glyphs: &[Glyph], text: &str, font_size: f32) -> GlyphCluster { debug_assert!(!glyphs.is_empty()); let mut width = 0.0; @@ -1182,8 +1171,6 @@ fn form_glyph_clusters( font: glyph.font.id, text: glyph.text.clone(), id: glyph.id, - variations: variations.to_vec(), - font_optical_sizing, }); x += glyph.width as f32; @@ -1436,23 +1423,17 @@ fn shape_text_with_font( if font_optical_sizing == crate::FontOpticalSizing::Auto { let has_explicit_opsz = variations.iter().any(|v| v.tag == *b"opsz"); if !has_explicit_opsz { - // Check if font has opsz axis - if let Ok(ttf_face) = ttf_parser::Face::parse(font_data, face_index) { - if let Some(axes) = ttf_face.tables().fvar { - let has_opsz_axis = axes - .axes - .into_iter() - .any(|axis| axis.tag == ttf_parser::Tag::from_bytes(b"opsz")); - if has_opsz_axis { - log::debug!( - "Auto-setting opsz={} (font-optical-sizing: auto)", - font_size - ); - final_variations.push(rustybuzz::Variation { - tag: Tag::from_bytes(b"opsz"), - value: font_size, - }); - } + // Check if font has opsz axis using the already parsed rb_font + if let Some(axes) = rb_font.tables().fvar { + let has_opsz_axis = axes + .axes + .into_iter() + .any(|axis| axis.tag == ttf_parser::Tag::from_bytes(b"opsz")); + if has_opsz_axis { + final_variations.push(rustybuzz::Variation { + tag: Tag::from_bytes(b"opsz"), + value: font_size, + }); } } } @@ -1460,17 +1441,6 @@ fn shape_text_with_font( // Apply font variations for variable fonts if !final_variations.is_empty() { - log::debug!( - "Applying {} font variations for shaping", - final_variations.len() - ); - for v in &final_variations { - log::debug!( - " Setting variation {:?} = {}", - std::str::from_utf8(&v.tag.to_bytes()).unwrap_or("????"), - v.value - ); - } rb_font.set_variations(&final_variations); } From 15f27ccd1bf0766c0dd741db81a55fc00cdc00c7 Mon Sep 17 00:00:00 2001 From: Laurenz Stampfl Date: Tue, 13 Jan 2026 14:55:40 +0100 Subject: [PATCH 10/10] Final cleanups --- crates/usvg/src/parser/text.rs | 3 +-- crates/usvg/src/text/flatten.rs | 2 -- crates/usvg/src/text/layout.rs | 4 ++-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/crates/usvg/src/parser/text.rs b/crates/usvg/src/parser/text.rs index 3c19294f1..a8309afb6 100644 --- a/crates/usvg/src/parser/text.rs +++ b/crates/usvg/src/parser/text.rs @@ -263,10 +263,9 @@ fn collect_text_chunks_impl( apply_kerning = false; } - // Parse font-optical-sizing (defaults to auto to match browser behavior) let font_optical_sizing = match parent.find_attribute::<&str>(AId::FontOpticalSizing) { Some("none") => crate::FontOpticalSizing::None, - _ => crate::FontOpticalSizing::Auto, // "auto" or missing = Auto (browser default) + _ => crate::FontOpticalSizing::Auto, // "auto" or missing (browser default) }; let mut text_length = diff --git a/crates/usvg/src/text/flatten.rs b/crates/usvg/src/text/flatten.rs index 0a8a130df..e5fa39f76 100644 --- a/crates/usvg/src/text/flatten.rs +++ b/crates/usvg/src/text/flatten.rs @@ -73,7 +73,6 @@ pub(crate) fn flatten(text: &mut Text, cache: &mut Cache) -> Option<(Group, NonZ // For variable fonts, we need to extract the outline with variations applied. // We can't use the cache here since the outline depends on variation values. - // Check explicit variations once (span-level, uniform for all glyphs). let has_explicit_variations = !span.variations.is_empty(); for glyph in &span.positioned_glyphs { @@ -267,7 +266,6 @@ impl DatabaseExt for Database { self.with_face_data(id, |data, face_index| -> Option { let mut font = ttf_parser::Face::parse(data, face_index).ok()?; - // Apply explicit font variations for v in variations { font.set_variation(ttf_parser::Tag::from_bytes(&v.tag), v.value); } diff --git a/crates/usvg/src/text/layout.rs b/crates/usvg/src/text/layout.rs index 07eb0034d..448d6545d 100644 --- a/crates/usvg/src/text/layout.rs +++ b/crates/usvg/src/text/layout.rs @@ -152,9 +152,9 @@ pub struct Span { pub paint_order: PaintOrder, /// The font size of the span. pub font_size: NonZeroPositiveF32, - /// Font variation settings for variable fonts (uniform for all glyphs in span). + /// Font variation settings for variable fonts. pub variations: Vec, - /// Font optical sizing mode for auto-opsz computation. + /// Font optical sizing mode. pub font_optical_sizing: crate::FontOpticalSizing, /// The visibility of the span. pub visible: bool,