From 17ea0d4ba91aa7dc00b2c0ff61721913a6f1d0b4 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 26 Aug 2021 21:16:29 +0200 Subject: [PATCH] Make font fallback disableable --- src/eval/state.rs | 47 +++++++++++++++++++++++----------------- src/library/text.rs | 5 +++++ tests/ref/text/font.png | Bin 21435 -> 22712 bytes tests/typ/text/font.typ | 19 ++++++++++------ 4 files changed, 44 insertions(+), 27 deletions(-) diff --git a/src/eval/state.rs b/src/eval/state.rs index 2037c695e..b6c0c9af8 100644 --- a/src/eval/state.rs +++ b/src/eval/state.rs @@ -119,13 +119,6 @@ impl Default for ParState { /// Defines font properties. #[derive(Debug, Clone, Eq, PartialEq, Hash)] pub struct FontState { - /// Whether 300 extra font weight should be added to what is defined by the - /// `variant`. - pub strong: bool, - /// Whether the the font style defined by the `variant` should be inverted. - pub emph: bool, - /// Whether a monospace font should be preferred. - pub monospace: bool, /// The font size. pub size: Length, /// The selected font variant (the final variant also depends on `strong` @@ -140,6 +133,15 @@ pub struct FontState { /// A list of font families with generic class definitions (the final /// family list also depends on `monospace`). pub families: Rc, + /// Whether 300 extra font weight should be added to what is defined by the + /// `variant`. + pub strong: bool, + /// Whether the the font style defined by the `variant` should be inverted. + pub emph: bool, + /// Whether a monospace font should be preferred. + pub monospace: bool, + /// Whether font fallback to a base list should occur. + pub fallback: bool, } impl FontState { @@ -164,10 +166,11 @@ impl FontState { /// The resolved family iterator. pub fn families(&self) -> impl Iterator + Clone { - let head = self - .monospace - .then(|| self.families.monospace.as_slice()) - .unwrap_or_default(); + let head = if self.monospace { + self.families.monospace.as_slice() + } else { + &[] + }; let core = self.families.list.iter().flat_map(move |family| { match family { @@ -178,10 +181,13 @@ impl FontState { } }); - head.iter() - .chain(core) - .chain(self.families.base.iter()) - .map(String::as_str) + let tail = if self.fallback { + self.families.base.as_slice() + } else { + &[] + }; + + head.iter().chain(core).chain(tail).map(String::as_str) } /// Access the `families` state mutably. @@ -193,19 +199,20 @@ impl FontState { impl Default for FontState { fn default() -> Self { Self { - families: Rc::new(FamilyState::default()), + size: Length::pt(11.0), variant: FontVariant { style: FontStyle::Normal, weight: FontWeight::REGULAR, stretch: FontStretch::NORMAL, }, - strong: false, - emph: false, - monospace: false, - size: Length::pt(11.0), top_edge: VerticalFontMetric::CapHeight, bottom_edge: VerticalFontMetric::Baseline, fill: Paint::Color(Color::Rgba(RgbaColor::BLACK)), + families: Rc::new(FamilyState::default()), + strong: false, + emph: false, + monospace: false, + fallback: true, } } } diff --git a/src/library/text.rs b/src/library/text.rs index f3e086c81..f12794aa8 100644 --- a/src/library/text.rs +++ b/src/library/text.rs @@ -19,6 +19,7 @@ pub fn font(ctx: &mut EvalContext, args: &mut Arguments) -> TypResult { let serif = args.named("serif")?; let sans_serif = args.named("sans-serif")?; let monospace = args.named("monospace")?; + let fallback = args.named("fallback")?; ctx.template.modify(move |state| { let font = state.font_mut(); @@ -66,6 +67,10 @@ pub fn font(ctx: &mut EvalContext, args: &mut Arguments) -> TypResult { if let Some(FamilyDef(monospace)) = &monospace { font.families_mut().monospace = monospace.clone(); } + + if let Some(fallback) = fallback { + font.fallback = fallback; + } }); Ok(Value::None) diff --git a/tests/ref/text/font.png b/tests/ref/text/font.png index 44183b3ac14dd9064329376e43273f5b24c6fd0a..b8e0775a61afffabc82a9507f585cdc16eec6297 100644 GIT binary patch literal 22712 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 literal 21435 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 diff --git a/tests/typ/text/font.typ b/tests/typ/text/font.typ index fbb999f8f..ecc078869 100644 --- a/tests/typ/text/font.typ +++ b/tests/typ/text/font.typ @@ -33,6 +33,18 @@ Emoji: 🐪, 🌋, 🏞 This is [#font(fill: rgb("FA644B")) way more] colorful. ] +// Disable font fallback beyond the user-specified list. +// Without disabling, Latin Modern Math would come to the rescue. +#font("PT Sans", "Twitter Color Emoji", fallback: false) +2π = 𝛼 + 𝛽. ✅ + +--- +// Test class definitions. +#font(sans-serif: "PT Sans") +[#font(family: sans-serif) Sans-serif.] \ +[#font(monospace) Monospace.] \ +[#font(monospace, monospace: ("Nope", "Latin Modern Math")) Math.] + --- // Test top and bottom edge. @@ -47,13 +59,6 @@ Emoji: 🐪, 🌋, 🏞 #try(cap-height, baseline) #try(x-height, baseline) ---- -// Test class definitions. -#font(sans-serif: "PT Sans") -[#font(family: sans-serif) Sans-serif.] \ -[#font(monospace) Monospace.] \ -[#font(monospace, monospace: ("Nope", "Latin Modern Math")) Math.] - --- // Error: 7-12 unexpected argument #font(false)