diff options
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/typst/src/layout/length.rs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/crates/typst/src/layout/length.rs b/crates/typst/src/layout/length.rs index 587085d3..26b9320b 100644 --- a/crates/typst/src/layout/length.rs +++ b/crates/typst/src/layout/length.rs @@ -5,7 +5,7 @@ use std::ops::{Add, Div, Mul, Neg}; use ecow::{eco_format, EcoString}; use crate::diag::{At, Hint, SourceResult}; -use crate::foundations::{func, scope, ty, Repr, Resolve, StyleChain}; +use crate::foundations::{func, scope, ty, Repr, Resolve, StyleChain, Styles}; use crate::layout::{Abs, Em}; use crate::syntax::Span; use crate::util::Numeric; @@ -132,6 +132,38 @@ impl Length { self.ensure_that_em_is_zero(span, "inches")?; Ok(self.abs.to_inches()) } + + /// Resolve this length to an absolute length. + /// + /// ```example + /// #set text(size: 12pt) + /// #style(styles => [ + /// #(6pt).to-absolute(styles) \ + /// #(6pt + 10em).to-absolute(styles) \ + /// #(10em).to-absolute(styles) + /// ]) + /// + /// #set text(size: 6pt) + /// #style(styles => [ + /// #(6pt).to-absolute(styles) \ + /// #(6pt + 10em).to-absolute(styles) \ + /// #(10em).to-absolute(styles) + /// ]) + /// ``` + #[func] + pub fn to_absolute( + &self, + /// The styles to resolve the length with. + /// + /// Since a length can use font-relative em units, resolving it to an + /// absolute length requires knowledge of the font size. This size is + /// provided through these styles. You can obtain the styles using + /// the [`style`]($style) function. + styles: Styles, + ) -> Length { + let styles = StyleChain::new(&styles); + self.resolve(styles).into() + } } impl Debug for Length { |
