From 261f387535ebe3b784d69893027d8edac01e1ba9 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 17 Feb 2022 18:12:13 +0100 Subject: Accept closures for heading styling --- src/library/heading.rs | 109 +++++++++++++++++++++++++++++++++++-------------- src/library/mod.rs | 6 +-- 2 files changed, 81 insertions(+), 34 deletions(-) (limited to 'src/library') diff --git a/src/library/heading.rs b/src/library/heading.rs index 2044355e..dd78b147 100644 --- a/src/library/heading.rs +++ b/src/library/heading.rs @@ -15,24 +15,25 @@ pub struct HeadingNode { #[class] impl HeadingNode { - /// The heading's font family. - pub const FAMILY: Smart = Smart::Auto; - /// The size of text in the heading. Just the surrounding text size if - /// `auto`. - pub const SIZE: Smart = Smart::Auto; - /// The fill color of text in the heading. Just the surrounding text color - /// if `auto`. - pub const FILL: Smart = Smart::Auto; + /// The heading's font family. Just the normal text family if `auto`. + pub const FAMILY: Leveled> = Leveled::Value(Smart::Auto); + /// The color of text in the heading. Just the normal text color if `auto`. + pub const FILL: Leveled> = Leveled::Value(Smart::Auto); + /// The size of text in the heading. + pub const SIZE: Leveled = Leveled::Mapping(|level| { + let upscale = (1.6 - 0.1 * level as f64).max(0.75); + Relative::new(upscale).into() + }); /// Whether text in the heading is strengthend. - pub const STRONG: bool = true; + pub const STRONG: Leveled = Leveled::Value(true); /// Whether text in the heading is emphasized. - pub const EMPH: bool = false; + pub const EMPH: Leveled = Leveled::Value(false); /// Whether the heading is underlined. - pub const UNDERLINE: bool = false; + pub const UNDERLINE: Leveled = Leveled::Value(false); /// The extra padding above the heading. - pub const ABOVE: Length = Length::zero(); + pub const ABOVE: Leveled = Leveled::Value(Length::zero()); /// The extra padding below the heading. - pub const BELOW: Length = Length::zero(); + pub const BELOW: Leveled = Leveled::Value(Length::zero()); fn construct(_: &mut Vm, args: &mut Args) -> TypResult