diff options
Diffstat (limited to 'crates/typst-library/src/text')
| -rw-r--r-- | crates/typst-library/src/text/mod.rs | 15 | ||||
| -rw-r--r-- | crates/typst-library/src/text/shaping.rs | 2 |
2 files changed, 14 insertions, 3 deletions
diff --git a/crates/typst-library/src/text/mod.rs b/crates/typst-library/src/text/mod.rs index 8bce5e8a..94ef426f 100644 --- a/crates/typst-library/src/text/mod.rs +++ b/crates/typst-library/src/text/mod.rs @@ -16,6 +16,7 @@ pub use self::shift::*; use rustybuzz::Tag; use ttf_parser::Rect; +use typst::diag::{bail, error, SourceResult}; use typst::font::{Font, FontStretch, FontStyle, FontWeight, VerticalFontMetric}; use crate::layout::ParElem; @@ -169,13 +170,23 @@ pub struct TextElem { #[default(Abs::pt(11.0))] pub size: TextSize, - /// The glyph fill color. + /// The glyph fill paint. /// /// ```example /// #set text(fill: red) /// This text is red. /// ``` - #[parse(args.named_or_find("fill")?)] + #[parse({ + let paint: Option<Spanned<Paint>> = args.named_or_find("fill")?; + if let Some(paint) = &paint { + // TODO: Implement gradients on text. + if matches!(paint.v, Paint::Gradient(_)) { + bail!(error!(paint.span, "text fill must be a solid color") + .with_hint("gradients on text will be supported soon")); + } + } + paint.map(|paint| paint.v) + })] #[default(Color::BLACK.into())] pub fill: Paint, diff --git a/crates/typst-library/src/text/shaping.rs b/crates/typst-library/src/text/shaping.rs index 4fe6b49b..df30a9c8 100644 --- a/crates/typst-library/src/text/shaping.rs +++ b/crates/typst-library/src/text/shaping.rs @@ -228,7 +228,7 @@ impl<'a> ShapedText<'a> { let size = Size::new(self.width, top + bottom); let mut offset = Abs::zero(); - let mut frame = Frame::new(size); + let mut frame = Frame::soft(size); frame.set_baseline(top); let shift = TextElem::baseline_in(self.styles); |
