From f347ed4314e32383dc09ff234180e8ea6fef7b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20d=27Herbais=20de=20Thun?= Date: Tue, 4 Apr 2023 19:21:25 +0200 Subject: [PATCH] Improved figure numbering, labelling and referencing (#491) --- library/src/layout/table.rs | 10 +- library/src/math/mod.rs | 48 +++- library/src/meta/bibliography.rs | 8 +- library/src/meta/counter.rs | 3 + library/src/meta/figure.rs | 377 +++++++++++++++++++++++++++++-- library/src/meta/heading.rs | 100 +++++++- library/src/meta/outline.rs | 90 +++++--- library/src/meta/reference.rs | 114 +++++++--- library/src/text/raw.rs | 25 +- library/src/visualize/image.rs | 25 +- src/geom/smart.rs | 9 + src/model/content.rs | 64 +++++- src/model/element.rs | 8 + src/model/realize.rs | 6 +- src/model/styles.rs | 17 +- tests/ref/meta/figure.png | Bin 26011 -> 103112 bytes tests/typ/meta/counter.typ | 10 +- tests/typ/meta/figure.typ | 80 +++++++ tests/typ/meta/query.typ | 2 + 19 files changed, 879 insertions(+), 117 deletions(-) diff --git a/library/src/layout/table.rs b/library/src/layout/table.rs index 4ba8a56e6..c9a67a1b2 100644 --- a/library/src/layout/table.rs +++ b/library/src/layout/table.rs @@ -1,5 +1,5 @@ use crate::layout::{AlignElem, GridLayouter, TrackSizings}; -use crate::meta::LocalName; +use crate::meta::{Figurable, LocalName}; use crate::prelude::*; /// A table of items. @@ -32,7 +32,7 @@ use crate::prelude::*; /// /// Display: Table /// Category: layout -#[element(Layout, LocalName)] +#[element(Layout, LocalName, Figurable)] pub struct TableElem { /// Defines the column sizes. See the [grid documentation]($func/grid) for /// more information on track sizing. @@ -293,3 +293,9 @@ impl LocalName for TableElem { } } } + +impl Figurable for TableElem { + fn priority(&self, _styles: StyleChain) -> isize { + -1000 + } +} diff --git a/library/src/math/mod.rs b/library/src/math/mod.rs index 82ad0a2f3..b07fc78f9 100644 --- a/library/src/math/mod.rs +++ b/library/src/math/mod.rs @@ -39,6 +39,7 @@ use self::fragment::*; use self::row::*; use self::spacing::*; use crate::layout::{HElem, ParElem, Spacing}; +use crate::meta::Refable; use crate::meta::{Count, Counter, CounterUpdate, LocalName, Numbering}; use crate::prelude::*; use crate::text::{ @@ -134,7 +135,9 @@ pub fn module() -> Module { /// /// Display: Equation /// Category: math -#[element(Locatable, Synthesize, Show, Finalize, Layout, LayoutMath, Count, LocalName)] +#[element( + Locatable, Synthesize, Show, Finalize, Layout, LayoutMath, Count, LocalName, Refable +)] pub struct EquationElem { /// Whether the equation is displayed as a separate block. #[default(false)] @@ -159,9 +162,11 @@ pub struct EquationElem { } impl Synthesize for EquationElem { - fn synthesize(&mut self, styles: StyleChain) { + fn synthesize(&mut self, _vt: &mut Vt, styles: StyleChain) -> SourceResult<()> { self.push_block(self.block(styles)); self.push_numbering(self.numbering(styles)); + + Ok(()) } } @@ -278,6 +283,45 @@ impl LocalName for EquationElem { } } +impl Refable for EquationElem { + fn reference( + &self, + vt: &mut Vt, + styles: StyleChain, + supplement: Option, + ) -> SourceResult { + // first we create the supplement of the heading + let mut supplement = supplement.unwrap_or_else(|| { + TextElem::packed(self.local_name(TextElem::lang_in(styles))) + }); + + // we append a space if the supplement is not empty + if !supplement.is_empty() { + supplement += TextElem::packed('\u{a0}') + }; + + // we check for a numbering + let Some(numbering) = self.numbering(styles) else { + bail!(self.span(), "only numbered equations can be referenced"); + }; + + // we get the counter and display it + let numbers = Counter::of(Self::func()) + .at(vt, self.0.location().expect("missing location"))? + .display(vt, &numbering.trimmed())?; + + Ok(supplement + numbers) + } + + fn numbering(&self, styles: StyleChain) -> Option { + self.numbering(styles) + } + + fn counter(&self, _styles: StyleChain) -> Counter { + Counter::of(Self::func()) + } +} + pub trait LayoutMath { fn layout_math(&self, ctx: &mut MathContext) -> SourceResult<()>; } diff --git a/library/src/meta/bibliography.rs b/library/src/meta/bibliography.rs index 635f1d8c0..7bc2ff7bd 100644 --- a/library/src/meta/bibliography.rs +++ b/library/src/meta/bibliography.rs @@ -133,8 +133,10 @@ impl BibliographyElem { } impl Synthesize for BibliographyElem { - fn synthesize(&mut self, styles: StyleChain) { + fn synthesize(&mut self, _vt: &mut Vt, styles: StyleChain) -> SourceResult<()> { self.push_style(self.style(styles)); + + Ok(()) } } @@ -316,10 +318,12 @@ pub struct CiteElem { } impl Synthesize for CiteElem { - fn synthesize(&mut self, styles: StyleChain) { + fn synthesize(&mut self, _vt: &mut Vt, styles: StyleChain) -> SourceResult<()> { self.push_supplement(self.supplement(styles)); self.push_brackets(self.brackets(styles)); self.push_style(self.style(styles)); + + Ok(()) } } diff --git a/library/src/meta/counter.rs b/library/src/meta/counter.rs index e11e049db..3868040e2 100644 --- a/library/src/meta/counter.rs +++ b/library/src/meta/counter.rs @@ -495,6 +495,9 @@ cast_from_value! { } Self::Selector(Selector::Elem(element, None)) + }, + selector: Selector => { + Self::Selector(selector) } } diff --git a/library/src/meta/figure.rs b/library/src/meta/figure.rs index fe93c5db6..aae13738e 100644 --- a/library/src/meta/figure.rs +++ b/library/src/meta/figure.rs @@ -1,12 +1,84 @@ use std::str::FromStr; -use super::{Count, Counter, CounterUpdate, LocalName, Numbering, NumberingPattern}; +use ecow::eco_vec; + +use super::{ + Count, Counter, CounterKey, CounterUpdate, LocalName, Numbering, NumberingPattern, +}; use crate::layout::{BlockElem, VElem}; +use crate::meta::{Refable, Supplement}; use crate::prelude::*; use crate::text::TextElem; /// A figure with an optional caption. /// +/// ## Content detection +/// By default, the figure will attempt to automatically detect the content +/// and use a priority list to detect which content is likely +/// to be the most important. The priority list is as follows: +/// - [image]($func/image) are the most important +/// - [equations]($func/equation) are the second most important +/// - [code]($func/raw) are the third most important +/// - [table]($func/table) are the fourth most important. +/// +/// There can be a variety of content within a figure and only the first element +/// of the most important category will be used. For example, if a figure contains +/// an image and a table, the image will be used. This behaviour can be overridden +/// using the `kind` parameter. By setting it, you can force the figure to use a +/// specific type of content. Note however that if the figure does not contain said +/// element, or the `kind` is set to a string, you will need to manually specify +/// the supplement to be able to make an outline or reference it. +/// +/// ```example +/// #figure(caption: [ Hello, world! ], kind: table)[ +/// #table( +/// columns: (auto, 1fr), +/// image("molecular.jpg", width: 32pt), +/// [ A first picture ], +/// image("molecular.jpg", width: 32pt), +/// [ A second picture ], +/// ) +/// ] +/// ``` +/// +/// If you use an element that is not supported by the figure, and set it as its `content` parameter, +/// to be able to make an outline or reference it, you will need to manually specify the supplement +/// and counter. Otherwise the figure will produce an error. +/// +/// ## Counting and supplement +/// Based on the `kind` parameter or the detected content, the figure will chose +/// the appropriate counter and supplement. These can be overridden by using the +/// `kind` and `supplement` parameters respectively. +/// +/// The overriding of these values is done as follows: +/// ```example +/// #figure(caption: [ Hello, world! ], kind: "hello", supplement: "Molecule")[ +/// #image("molecular.jpg", width: 32pt) +/// ] +/// ``` +/// +/// The default counters are defined as follows: +/// - for (tables)[$func/table]: `counter(figure.where(kind: table))` +/// - for (equations)[$func/equation]: `counter(figure.where(kind: math.equation))` +/// - for (raw text)[$func/raw]: `counter(figure.where(kind: raw))` +/// - for (images)[$func/image]: `counter(figure.where(kind: image))` +/// - for a custom kind: `counter(figure.where(kind: kind))` +/// +/// These are the counters you need to use if you want to change the +/// counting behaviour of figures. +/// +/// ## Numbering +/// By default, the figure will be numbered using the `1` [numbering pattern]($func/numbering). +/// This can be overridden by using the `numbering` parameter. +/// +/// ## Outline +/// By default, the figure will be outlined in the list of figures/tables/code. This can be disabled by +/// setting the `outlined` parameter to `false`. +/// +/// ## Global figure counter +/// There is a global figure counter which can be accessed which counts all numbered figures in the document +/// regardless of its type. This counter can be accessed using the `counter(figure)` function. +/// /// ## Example /// ```example /// = Pipeline @@ -23,7 +95,7 @@ use crate::text::TextElem; /// /// Display: Figure /// Category: meta -#[element(Locatable, Synthesize, Count, Show, LocalName)] +#[element(Locatable, Synthesize, Count, Show, Refable)] pub struct FigureElem { /// The content of the figure. Often, an [image]($func/image). #[required] @@ -32,41 +104,241 @@ pub struct FigureElem { /// The figure's caption. pub caption: Option, + /// The figure's supplement, if not provided, the figure will attempt to + /// automatically detect the counter from the content. + /// + /// ## Custom figure type + /// If you are using a custom figure type and would like to figure to be + /// referenced, you will need to manually specify the supplement, using either + /// a function or a string. + /// + /// ```example + /// #figure(caption: "My custom figure", kind: "foo", supplement: "Bar")[ + /// #block[ The inside of my custom figure! ] + /// ] + /// ``` + #[default(Smart::Auto)] + pub supplement: Smart>, + + /// Whether the figure should appear in the list of figures/tables/code. + /// Defaults to `true`. + #[default(true)] + pub outlined: bool, + /// How to number the figure. Accepts a /// [numbering pattern or function]($func/numbering). #[default(Some(NumberingPattern::from_str("1").unwrap().into()))] pub numbering: Option, + /// The type of the figure. Setting this will override the automatic detection. + /// + /// This can be useful if you wish to create a custom figure type that is not + /// an [image]($func/image), a [table]($func/table) or a [code]($func/raw). Or if + /// you want to force the figure to use a specific type regardless of its content. + /// + /// You can set the kind to be an element, or a string. If you set it to be + /// a string or an element that is not supported by the figure, you will need to + /// manually specify the supplement if you wish to number the figure. + #[default(Smart::Auto)] + pub kind: Smart, + /// The vertical gap between the body and caption. #[default(Em::new(0.65).into())] pub gap: Length, + + /// Convenience field to get access to the figures counter, if any. + /// If the figure is not numbered, this will be `none`. + /// Otherwise it will be set to the counter being used by this figure. + #[synthesized] + #[internal] + pub counter: Option, +} + +impl FigureElem { + /// Determines the type of the figure by looking at the content, finding all + /// [`Figurable`] elements and sorting them by priority then returning the highest. + pub fn determine_type( + &self, + styles: StyleChain, + require_supplement: bool, + ) -> Option { + let potential_elems = self.body().query(if require_supplement { + Selector::All(eco_vec![ + Selector::can::(), + Selector::can::() + ]) + } else { + Selector::can::() + }); + + potential_elems.into_iter().max_by_key(|elem| { + elem.with::() + .expect("should be figurable") + .priority(styles) + }) + } + + /// Finds the element with the given function in the figure's content. + /// Returns `None` if no element with the given function is found. + pub fn find_elem(&self, func: ElemFunc) -> Option { + self.body().query(Selector::Elem(func, None)).first().cloned() + } + + /// Builds the supplement and numbering of the figure. + /// If there is no numbering, returns [`None`]. + /// + /// # Errors + /// If a numbering is specified but the [`Self::data()`] is `None`. + pub fn show_supplement_and_numbering( + &self, + vt: &mut Vt, + styles: StyleChain, + external_supp: Option, + ) -> SourceResult> { + if let (Some(numbering), Some(supplement), Some(counter)) = ( + self.numbering(styles), + self.supplement(styles) + .as_custom() + .and_then(|s| s.and_then(Supplement::as_content)), + self.counter(), + ) { + let mut name = external_supp.unwrap_or(supplement); + + if !name.is_empty() { + name += TextElem::packed("\u{a0}"); + } + + let number = counter + .at(vt, self.0.location().expect("missing location"))? + .display(vt, &numbering)? + .spanned(self.span()); + + Ok(Some(name + number)) + } else { + Ok(None) + } + } + + /// Builds the caption for the figure. + /// If there is a numbering, will also try to show the supplement and the numbering. + /// + /// # Errors + /// If a numbering is specified but the [`Self::element`] is `None`. + pub fn show_caption(&self, vt: &mut Vt, styles: StyleChain) -> SourceResult { + let Some(mut caption) = self.caption(styles) else { + return Ok(Content::empty()); + }; + + if let Some(sup_and_num) = self.show_supplement_and_numbering(vt, styles, None)? { + caption = sup_and_num + TextElem::packed(": ") + caption; + } + + Ok(caption) + } } impl Synthesize for FigureElem { - fn synthesize(&mut self, styles: StyleChain) { + fn synthesize(&mut self, vt: &mut Vt, styles: StyleChain) -> SourceResult<()> { self.push_numbering(self.numbering(styles)); + + // We get the numbering or `None`. + let numbering = self.numbering(styles); + let supplement = self.supplement(styles); + + // We get the content or `None`. + let content = match self.kind(styles) { + Smart::Auto => match self.determine_type(styles, supplement.is_auto()) { + Some(ty) => Some(ty), + None => bail!( + self.span(), + "unable to determine figure type, use `kind` to manually specify it" + ), + }, + Smart::Custom(ContentParam::Elem(ty)) => self.find_elem(ty), + Smart::Custom(ContentParam::Name(_)) => None, + }; + + if self.kind(styles).is_auto() { + if let Some(content) = &content { + self.push_kind(Smart::Custom(ContentParam::Elem(content.func()))); + } + } + + // The list of choices is the following: + // 1. If there is a detected content, we use the counter `counter(figure.where(kind: detected_content))` + // 2. If there is a name/elem, we use the counter `counter(figure.where(kind: name/elem))` + // 4. We return None. + let counter = content + .as_ref() + .map(Content::func) + .map(Value::from) + .or_else(|| self.kind(styles).as_custom().map(Value::from)) + .map(|content| { + Counter::new(CounterKey::Selector(Selector::Elem( + Self::func(), + Some(dict! { + "kind" => content, + }), + ))) + }); + + // We get the supplement or `None`. + // The supplement must either be set manually or the content identification + // must have succeeded. + let supplement = match supplement { + Smart::Auto => { + content.as_ref().and_then(|c| c.with::()).map(|c| { + Supplement::Content(TextElem::packed( + c.local_name(TextElem::lang_in(styles)), + )) + }) + } + Smart::Custom(supp) => supp, + }; + + // When the user wishes to number their figure, we check whether there is a + // counter and a supplement. If so, we push the element, which is just a + // summary of the caption properties. We also push all of the components + // of the summary for convenient access by the user for `show` rules. + if let Some(numbering) = numbering { + let Some(counter) = counter else { + bail!(self.span(), "numbering a figure requires that is has a kind"); + }; + + let Some(supplement) = supplement else { + bail!(self.span(), "numbering a figure requires that is has a supplement"); + }; + + let supplement = supplement + .resolve(vt, [content.unwrap_or_else(|| self.body()).into()])?; + + self.push_supplement(Smart::Custom(Some(Supplement::Content( + supplement.clone(), + )))); + self.push_counter(Some(counter.clone())); + self.push_numbering(Some(numbering.clone())); + } else { + self.push_supplement(Smart::Custom(None)); + self.push_counter(None); + self.push_numbering(None); + } + + Ok(()) } } impl Show for FigureElem { - fn show(&self, _: &mut Vt, styles: StyleChain) -> SourceResult { + fn show(&self, vt: &mut Vt, styles: StyleChain) -> SourceResult { + // We build the body of the figure. let mut realized = self.body(); - if let Some(mut caption) = self.caption(styles) { - if let Some(numbering) = self.numbering(styles) { - let name = self.local_name(TextElem::lang_in(styles)); - caption = TextElem::packed(eco_format!("{name}\u{a0}")) - + Counter::of(Self::func()) - .display(Some(numbering), false) - .spanned(self.span()) - + TextElem::packed(": ") - + caption; - } - + // We build the caption, if any. + if self.caption(styles).is_some() { realized += VElem::weak(self.gap(styles).into()).pack(); - realized += caption; + realized += self.show_caption(vt, styles)?; } + // We wrap the contents in a block. Ok(BlockElem::new() .with_body(Some(realized)) .with_breakable(false) @@ -77,21 +349,76 @@ impl Show for FigureElem { impl Count for FigureElem { fn update(&self) -> Option { + // If the figure is numbered, step the counter by one. + // This steps the `counter(figure)` which is global to all numbered figures. self.numbering(StyleChain::default()) .is_some() .then(|| CounterUpdate::Step(NonZeroUsize::ONE)) } } -impl LocalName for FigureElem { - fn local_name(&self, lang: Lang) -> &'static str { - match lang { - Lang::CHINESE => "图", - Lang::GERMAN => "Abbildung", - Lang::ITALIAN => "Figura", - Lang::PORTUGUESE => "Figura", - Lang::RUSSIAN => "Рисунок", - Lang::ENGLISH | Lang::FRENCH | _ => "Figure", +impl Refable for FigureElem { + fn reference( + &self, + vt: &mut Vt, + styles: StyleChain, + supplement: Option, + ) -> SourceResult { + // If the figure is not numbered, we cannot reference it. + // Otherwise we build the supplement and numbering scheme. + let Some(desc) = self.show_supplement_and_numbering(vt, styles, supplement)? else { + bail!(self.span(), "cannot reference unnumbered figure") + }; + + Ok(desc) + } + + fn outline(&self, vt: &mut Vt, styles: StyleChain) -> SourceResult> { + // If the figure is not outlined, it is not referenced. + if !self.outlined(styles) { + return Ok(None); } + + self.show_caption(vt, styles).map(Some) + } + + fn numbering(&self, styles: StyleChain) -> Option { + self.numbering(styles) + } + + fn counter(&self, _styles: StyleChain) -> Counter { + self.counter().unwrap_or_else(|| Counter::of(Self::func())) } } + +/// The `kind` parameter of [`FigureElem`]. +#[derive(Debug, Clone)] +pub enum ContentParam { + /// The content is an element function. + Elem(ElemFunc), + + /// The content is a name. + Name(EcoString), +} + +cast_from_value! { + ContentParam, + v: ElemFunc => Self::Elem(v), + v: EcoString => Self::Name(v), +} + +cast_to_value! { + v: ContentParam => match v { + ContentParam::Elem(v) => v.into(), + ContentParam::Name(v) => v.into(), + } +} + +/// An element that can be autodetected in a figure. +/// This trait is used to determine the type of a figure, its counter, its numbering pattern +/// and the supplement to use for referencing it and creating the caption. +/// The element chosen as the figure's content is the one with the highest priority. +pub trait Figurable { + /// The priority of this element. + fn priority(&self, styles: StyleChain) -> isize; +} diff --git a/library/src/meta/heading.rs b/library/src/meta/heading.rs index c9dd1f81f..e4339dc8d 100644 --- a/library/src/meta/heading.rs +++ b/library/src/meta/heading.rs @@ -1,10 +1,10 @@ use typst::font::FontWeight; -use super::{Counter, CounterUpdate, LocalName, Numbering}; +use super::{Counter, CounterUpdate, LocalName, Numbering, Refable}; use crate::layout::{BlockElem, HElem, VElem}; -use crate::meta::Count; +use crate::meta::{Count, Supplement}; use crate::prelude::*; -use crate::text::{TextElem, TextSize}; +use crate::text::{SpaceElem, TextElem, TextSize}; /// A section heading. /// @@ -41,7 +41,7 @@ use crate::text::{TextElem, TextSize}; /// /// Display: Heading /// Category: meta -#[element(Locatable, Synthesize, Count, Show, Finalize, LocalName)] +#[element(Locatable, Synthesize, Count, Show, Finalize, LocalName, Refable)] pub struct HeadingElem { /// The logical nesting depth of the heading, starting from one. #[default(NonZeroUsize::ONE)] @@ -74,16 +74,35 @@ pub struct HeadingElem { #[default(true)] pub outlined: bool, + /// A supplement for the heading. + /// + /// For references to headings, this is added before the + /// referenced number. + /// + /// ```example + /// #set heading(numbering: "1.", supplement: "Chapter") + /// + /// = Introduction + /// In @intro, we see how to turn + /// Sections into Chapters. And + /// in @intro[Part], it is done + /// manually. + /// ``` + #[default(Smart::Auto)] + pub supplement: Smart>, + /// The heading's title. #[required] pub body: Content, } impl Synthesize for HeadingElem { - fn synthesize(&mut self, styles: StyleChain) { + fn synthesize(&mut self, _vt: &mut Vt, styles: StyleChain) -> SourceResult<()> { self.push_level(self.level(styles)); self.push_numbering(self.numbering(styles)); self.push_outlined(self.outlined(styles)); + + Ok(()) } } @@ -137,6 +156,77 @@ cast_from_value! { v: Content => v.to::().ok_or("expected heading")?.clone(), } +impl Refable for HeadingElem { + fn reference( + &self, + vt: &mut Vt, + styles: StyleChain, + supplement: Option, + ) -> SourceResult { + // first we create the supplement of the heading + let mut supplement = if let Some(supplement) = supplement { + supplement + } else { + match self.supplement(styles) { + Smart::Auto => { + TextElem::packed(self.local_name(TextElem::lang_in(styles))) + } + Smart::Custom(None) => Content::empty(), + Smart::Custom(Some(supplement)) => { + supplement.resolve(vt, std::iter::once(Value::from(self.clone())))? + } + } + }; + + // we append a space if the supplement is not empty + if !supplement.is_empty() { + supplement += TextElem::packed('\u{a0}') + }; + + // we check for a numbering + let Some(numbering) = self.numbering(styles) else { + bail!(self.span(), "only numbered headings can be referenced"); + }; + + // we get the counter and display it + let numbers = Counter::of(Self::func()) + .at(vt, self.0.location().expect("missing location"))? + .display(vt, &numbering.trimmed())?; + + Ok(supplement + numbers) + } + + fn level(&self, styles: StyleChain) -> usize { + self.level(styles).get() + } + + fn numbering(&self, styles: StyleChain) -> Option { + self.numbering(styles) + } + + fn counter(&self, _styles: StyleChain) -> Counter { + Counter::of(Self::func()) + } + + fn outline(&self, vt: &mut Vt, styles: StyleChain) -> SourceResult> { + // we check if the heading is outlined + if !self.outlined(styles) { + return Ok(None); + } + + // We build the numbering followed by the title + let mut start = self.body(); + if let Some(numbering) = self.numbering(StyleChain::default()) { + let numbers = Counter::of(HeadingElem::func()) + .at(vt, self.0.location().expect("missing location"))? + .display(vt, &numbering)?; + start = numbers + SpaceElem::new().pack() + start; + }; + + Ok(Some(start)) + } +} + impl LocalName for HeadingElem { fn local_name(&self, lang: Lang) -> &'static str { match lang { diff --git a/library/src/meta/outline.rs b/library/src/meta/outline.rs index 9438225f1..f24df6539 100644 --- a/library/src/meta/outline.rs +++ b/library/src/meta/outline.rs @@ -1,14 +1,18 @@ -use super::{Counter, CounterKey, HeadingElem, LocalName}; +use super::{Counter, CounterKey, HeadingElem, LocalName, Refable}; use crate::layout::{BoxElem, HElem, HideElem, ParbreakElem, RepeatElem}; use crate::prelude::*; use crate::text::{LinebreakElem, SpaceElem, TextElem}; -/// A section outline / table of contents. +/// A section outline / table of contents / table of figures / table of tables / etc. /// /// This function generates a list of all headings in the document, up to a /// given depth. The [heading]($func/heading) numbering will be reproduced /// within the outline. /// +/// Alternatively, by setting the `target` parameter, the outline can be used to +/// generate a list of all figures, tables, code blocks, etc. When the `target` parameter +/// is set, the `depth` parameter is ignored unless it is set to `heading`. +/// /// ## Example /// ```example /// #outline() @@ -20,6 +24,15 @@ use crate::text::{LinebreakElem, SpaceElem, TextElem}; /// #lorem(10) /// ``` /// +/// ## Example: List of figures +/// ```example +/// #outline(target: figure.where(kind: image), title: "Table of Figures") +/// +/// #figure(caption: "A nice figure!")[ +/// #image("/tiger.jpg") +/// ] +/// ``` +/// /// Display: Outline /// Category: meta #[element(Show, LocalName)] @@ -37,6 +50,10 @@ pub struct OutlineElem { /// this argument is `{none}`, all headings are included. pub depth: Option, + /// The type of element to include in the outline. + #[default(Selector::Elem(HeadingElem::func(), Some(dict! { "outlined" => true })))] + pub target: Selector, + /// Whether to indent the subheadings to align the start of their numbering /// with the title of their parents. This will only have an effect if a /// [heading numbering]($func/heading.numbering) is set. @@ -72,6 +89,7 @@ pub struct OutlineElem { impl Show for OutlineElem { fn show(&self, vt: &mut Vt, styles: StyleChain) -> SourceResult { let mut seq = vec![ParbreakElem::new().pack()]; + // Build the outline title. if let Some(title) = self.title(styles) { let title = title.unwrap_or_else(|| { TextElem::packed(self.local_name(TextElem::lang_in(styles))) @@ -88,30 +106,36 @@ impl Show for OutlineElem { } let indent = self.indent(styles); - let depth = self.depth(styles); + let depth = self.depth(styles).map_or(usize::MAX, NonZeroUsize::get); - let mut ancestors: Vec<&HeadingElem> = vec![]; - let elems = vt.introspector.query(Selector::Elem( - HeadingElem::func(), - Some(dict! { "outlined" => true }), - )); + let mut ancestors: Vec<&Content> = vec![]; + let elems = vt.introspector.query(self.target(styles)); for elem in &elems { - let heading = elem.to::().unwrap(); - let location = heading.0.location().unwrap(); - if !heading.outlined(StyleChain::default()) { + let Some(refable) = elem.with::() else { + bail!(elem.span(), "outlined elements must be referenceable"); + }; + + let location = elem.location().expect("missing location"); + + if depth < refable.level(styles) { continue; } - if let Some(depth) = depth { - if depth < heading.level(StyleChain::default()) { - continue; - } - } + let Some(outline) = refable.outline(vt, styles)? else { + continue; + }; - while ancestors.last().map_or(false, |last| { - last.level(StyleChain::default()) >= heading.level(StyleChain::default()) - }) { + // Deals with the ancestors of the current element. + // This is only applicable for elements with a hierarchy/level. + while ancestors + .last() + .and_then(|ancestor| ancestor.with::()) + .map_or(false, |last| { + last.level(StyleChain::default()) + >= refable.level(StyleChain::default()) + }) + { ancestors.pop(); } @@ -119,10 +143,16 @@ impl Show for OutlineElem { if indent { let mut hidden = Content::empty(); for ancestor in &ancestors { - if let Some(numbering) = ancestor.numbering(StyleChain::default()) { - let numbers = Counter::of(HeadingElem::func()) - .at(vt, ancestor.0.location().unwrap())? + let ancestor_refable = ancestor.with::().unwrap(); + + if let Some(numbering) = + ancestor_refable.numbering(StyleChain::default()) + { + let numbers = ancestor_refable + .counter(styles) + .at(vt, ancestor.location().unwrap())? .display(vt, &numbering)?; + hidden += numbers + SpaceElem::new().pack(); }; } @@ -133,17 +163,8 @@ impl Show for OutlineElem { } } - // Format the numbering. - let mut start = heading.body(); - if let Some(numbering) = heading.numbering(StyleChain::default()) { - let numbers = Counter::of(HeadingElem::func()) - .at(vt, location)? - .display(vt, &numbering)?; - start = numbers + SpaceElem::new().pack() + start; - }; - - // Add the numbering and section name. - seq.push(start.linked(Destination::Location(location))); + // Add the outline of the element. + seq.push(outline.linked(Destination::Location(location))); // Add filler symbols between the section name and page number. if let Some(filler) = self.fill(styles) { @@ -167,7 +188,8 @@ impl Show for OutlineElem { let end = TextElem::packed(eco_format!("{page}")); seq.push(end.linked(Destination::Location(location))); seq.push(LinebreakElem::new().pack()); - ancestors.push(heading); + + ancestors.push(elem); } seq.push(ParbreakElem::new().pack()); diff --git a/library/src/meta/reference.rs b/library/src/meta/reference.rs index 24687845a..81fd88b9a 100644 --- a/library/src/meta/reference.rs +++ b/library/src/meta/reference.rs @@ -1,6 +1,5 @@ -use super::{BibliographyElem, CiteElem, Counter, LocalName, Numbering}; +use super::{BibliographyElem, CiteElem, Counter, Numbering}; use crate::prelude::*; -use crate::text::TextElem; /// A reference to a label or bibliography. /// @@ -83,9 +82,10 @@ pub struct RefElem { } impl Synthesize for RefElem { - fn synthesize(&mut self, styles: StyleChain) { - let citation = self.to_citation(styles); + fn synthesize(&mut self, vt: &mut Vt, styles: StyleChain) -> SourceResult<()> { + let citation = self.to_citation(vt, styles)?; self.push_citation(Some(citation)); + Ok(()) } } @@ -103,55 +103,42 @@ impl Show for RefElem { bail!(self.span(), "label occurs in the document and its bibliography"); } - return Ok(self.to_citation(styles).pack()); + return Ok(self.to_citation(vt, styles)?.pack()); } let elem = elem.at(self.span())?; - if !elem.can::() { + if !elem.can::() { bail!(self.span(), "cannot reference {}", elem.func().name()); } - let supplement = self.supplement(styles); - let mut supplement = match supplement { - Smart::Auto => elem - .with::() - .map(|elem| elem.local_name(TextElem::lang_in(styles))) - .map(TextElem::packed) - .unwrap_or_default(), - Smart::Custom(None) => Content::empty(), - Smart::Custom(Some(Supplement::Content(content))) => content, - Smart::Custom(Some(Supplement::Func(func))) => { - func.call_vt(vt, [elem.clone().into()])?.display() + let supplement = match self.supplement(styles) { + Smart::Auto | Smart::Custom(None) => None, + Smart::Custom(Some(supplement)) => { + Some(supplement.resolve(vt, [elem.clone().into()])?) } }; - if !supplement.is_empty() { - supplement += TextElem::packed('\u{a0}'); - } + let reference = elem + .with::() + .expect("element should be refable") + .reference(vt, styles, supplement)?; - let Some(numbering) = elem.cast_field::("numbering") else { - bail!(self.span(), "only numbered elements can be referenced"); - }; - - let numbers = Counter::of(elem.func()) - .at(vt, elem.location().unwrap())? - .display(vt, &numbering.trimmed())?; - - Ok((supplement + numbers).linked(Destination::Location(elem.location().unwrap()))) + Ok(reference.linked(Destination::Location(elem.location().unwrap()))) } } impl RefElem { /// Turn the reference into a citation. - pub fn to_citation(&self, styles: StyleChain) -> CiteElem { + pub fn to_citation(&self, vt: &mut Vt, styles: StyleChain) -> SourceResult { let mut elem = CiteElem::new(vec![self.target().0]); elem.0.set_location(self.0.location().unwrap()); - elem.synthesize(styles); + elem.synthesize(vt, styles)?; elem.push_supplement(match self.supplement(styles) { Smart::Custom(Some(Supplement::Content(content))) => Some(content), _ => None, }); - elem + + Ok(elem) } } @@ -161,6 +148,29 @@ pub enum Supplement { Func(Func), } +impl Supplement { + /// Tries to resolve the supplement into its content. + pub fn resolve( + &self, + vt: &mut Vt, + args: impl IntoIterator, + ) -> SourceResult { + match self { + Supplement::Content(content) => Ok(content.clone()), + Supplement::Func(func) => func.call_vt(vt, args).map(|v| v.display()), + } + } + + /// Tries to get the content of the supplement. + /// Returns `None` if the supplement is a function. + pub fn as_content(self) -> Option { + match self { + Supplement::Content(content) => Some(content), + _ => None, + } + } +} + cast_from_value! { Supplement, v: Content => Self::Content(v), @@ -173,3 +183,43 @@ cast_to_value! { Supplement::Func(v) => v.into(), } } + +/// Marks an element as being able to be referenced. +/// This is used to implement the `@ref` macro. +/// It is expected to build the [`Content`] that gets linked +/// by the [`RefElement`]. +pub trait Refable { + /// Tries to build a reference content for this element. + /// + /// # Arguments + /// - `vt` - The virtual typesetter. + /// - `styles` - The styles of the reference. + /// - `location` - The location where the reference is being created. + /// - `supplement` - The supplement of the reference. + fn reference( + &self, + vt: &mut Vt, + styles: StyleChain, + supplement: Option, + ) -> SourceResult; + + /// Tries to build an outline element for this element. + /// If this returns `None`, the outline will not include this element. + /// By default this just calls [`Refable::reference`]. + fn outline(&self, vt: &mut Vt, styles: StyleChain) -> SourceResult> { + self.reference(vt, styles, None).map(Some) + } + + /// Returns the level of this element. + /// This is used to determine the level of the outline. + /// By default this returns `0`. + fn level(&self, _styles: StyleChain) -> usize { + 0 + } + + /// Returns the numbering of this element. + fn numbering(&self, styles: StyleChain) -> Option; + + /// Returns the counter of this element. + fn counter(&self, styles: StyleChain) -> Counter; +} diff --git a/library/src/text/raw.rs b/library/src/text/raw.rs index 3c9f86e5f..2324eb212 100644 --- a/library/src/text/raw.rs +++ b/library/src/text/raw.rs @@ -6,6 +6,7 @@ use super::{ FontFamily, FontList, Hyphenate, LinebreakElem, SmartQuoteElem, TextElem, TextSize, }; use crate::layout::BlockElem; +use crate::meta::{Figurable, LocalName}; use crate::prelude::*; /// Raw text with optional syntax highlighting. @@ -35,7 +36,7 @@ use crate::prelude::*; /// /// Display: Raw Text / Code /// Category: text -#[element(Synthesize, Show, Finalize)] +#[element(Synthesize, Show, Finalize, LocalName, Figurable)] pub struct RawElem { /// The raw text. /// @@ -121,8 +122,10 @@ impl RawElem { } impl Synthesize for RawElem { - fn synthesize(&mut self, styles: StyleChain) { + fn synthesize(&mut self, _vt: &mut Vt, styles: StyleChain) -> SourceResult<()> { self.push_lang(self.lang(styles)); + + Ok(()) } } @@ -197,6 +200,24 @@ impl Finalize for RawElem { } } +impl LocalName for RawElem { + fn local_name(&self, lang: Lang) -> &'static str { + match lang { + Lang::CHINESE => "代码", + Lang::ITALIAN => "Codice", + Lang::RUSSIAN => "код", + Lang::FRENCH => "Liste", + Lang::ENGLISH | Lang::GERMAN | _ => "Listing", + } + } +} + +impl Figurable for RawElem { + fn priority(&self, _styles: StyleChain) -> isize { + 500 + } +} + /// Highlight a syntax node in a theme by calling `f` with ranges and their /// styles. fn highlight_themed( diff --git a/library/src/visualize/image.rs b/library/src/visualize/image.rs index 8a81a40ea..3e4d1adb1 100644 --- a/library/src/visualize/image.rs +++ b/library/src/visualize/image.rs @@ -3,7 +3,10 @@ use std::path::Path; use typst::image::{Image, ImageFormat, RasterFormat, VectorFormat}; -use crate::prelude::*; +use crate::{ + meta::{Figurable, LocalName}, + prelude::*, +}; /// A raster or vector graphic. /// @@ -22,7 +25,7 @@ use crate::prelude::*; /// /// Display: Image /// Category: visualize -#[element(Layout)] +#[element(Layout, LocalName, Figurable)] pub struct ImageElem { /// Path to an image file. #[required] @@ -112,6 +115,24 @@ impl Layout for ImageElem { } } +impl LocalName for ImageElem { + fn local_name(&self, lang: Lang) -> &'static str { + match lang { + Lang::CHINESE => "图", + Lang::GERMAN => "Abbildung", + Lang::ITALIAN | Lang::PORTUGUESE => "Figura", + Lang::RUSSIAN => "Рисунок", + Lang::ENGLISH | Lang::FRENCH | _ => "Figure", + } + } +} + +impl Figurable for ImageElem { + fn priority(&self, _styles: StyleChain) -> isize { + 1000 + } +} + /// How an image should adjust itself to a given area. #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Cast)] pub enum ImageFit { diff --git a/src/geom/smart.rs b/src/geom/smart.rs index c977d6519..d9f8fd16e 100644 --- a/src/geom/smart.rs +++ b/src/geom/smart.rs @@ -20,6 +20,15 @@ impl Smart { matches!(self, Self::Custom(_)) } + /// Returns a reference the contained custom value. + /// If the value is [`Smart::Auto`], `None` is returned. + pub fn as_custom(self) -> Option { + match self { + Self::Auto => None, + Self::Custom(x) => Some(x), + } + } + /// Map the contained custom value with `f`. pub fn map(self, f: F) -> Smart where diff --git a/src/model/content.rs b/src/model/content.rs index f95ce1042..db8677157 100644 --- a/src/model/content.rs +++ b/src/model/content.rs @@ -7,7 +7,7 @@ use ecow::{eco_format, EcoString, EcoVec}; use super::{ element, Behave, Behaviour, ElemFunc, Element, Fold, Guard, Label, Locatable, - Location, Recipe, Style, Styles, Synthesize, + Location, Recipe, Selector, Style, Styles, Synthesize, }; use crate::diag::{SourceResult, StrResult}; use crate::doc::Meta; @@ -105,6 +105,12 @@ impl Content { (self.func.0.vtable)(TypeId::of::()).is_some() } + /// Whether the contained element has the given capability. + /// Where the capability is given by a `TypeId`. + pub fn can_type_id(&self, type_id: TypeId) -> bool { + (self.func.0.vtable)(type_id).is_some() + } + /// Cast to a trait object if the contained element has the given /// capability. pub fn with(&self) -> Option<&C> @@ -347,6 +353,62 @@ impl Content { pub fn set_location(&mut self, location: Location) { self.attrs.push(Attr::Location(location)); } + + /// Gives an iterator over the children of this content + pub fn children(&self) -> impl Iterator { + self.attrs.iter().filter_map(Attr::child) + } + + /// Gives an iterator over the children of this content that are contained + /// within the arguments of the content. + pub fn children_in_args(&self) -> impl Iterator { + self.attrs + .iter() + .filter_map(Attr::value) + .filter_map(|value| match value { + Value::Content(content) => Some(content), + _ => None, + }) + } + + /// Queries the content tree for all elements that match the given selector. + /// + /// # Show rules + /// Elements produced in `show` rules will not be included in the results. + pub fn query(&self, selector: Selector) -> Vec { + let mut results = Vec::new(); + self.query_into(&selector, &mut results); + results + } + + /// Queries the content tree for all elements that match the given selector + /// and stores the results inside of the `results` vec. + fn query_into(&self, selector: &Selector, results: &mut Vec) { + if selector.matches(self) { + results.push(self.clone()); + } + + for attr in &self.attrs { + match attr { + Attr::Child(child) => child.query_into(selector, results), + Attr::Value(value) => walk_value(&value, selector, results), + _ => {} + } + } + + /// Walks a given value to find any content that matches the selector. + fn walk_value(value: &Value, selector: &Selector, results: &mut Vec) { + match value { + Value::Content(content) => content.query_into(selector, results), + Value::Array(array) => { + for value in array { + walk_value(value, selector, results); + } + } + _ => {} + } + } + } } impl Debug for Content { diff --git a/src/model/element.rs b/src/model/element.rs index c6738582a..4c825a202 100644 --- a/src/model/element.rs +++ b/src/model/element.rs @@ -63,6 +63,14 @@ impl ElemFunc { (self.0.construct)(vm, args) } + /// Whether the contained element has the given capability. + pub fn can(&self) -> bool + where + C: ?Sized + 'static, + { + (self.0.vtable)(TypeId::of::()).is_some() + } + /// Create a selector for elements of this function. pub fn select(self) -> Selector { Selector::Elem(self, None) diff --git a/src/model/realize.rs b/src/model/realize.rs index e96e0dc16..48a0fbdce 100644 --- a/src/model/realize.rs +++ b/src/model/realize.rs @@ -42,7 +42,7 @@ pub fn realize( } if let Some(elem) = elem.with_mut::() { - elem.synthesize(styles); + elem.synthesize(vt, styles)?; } elem.mark_prepared(); @@ -152,7 +152,7 @@ fn try_apply( } // Not supported here. - Some(Selector::Any(_)) => Ok(None), + Some(Selector::Any(_) | Selector::All(_) | Selector::Can(_)) => Ok(None), None => Ok(None), } @@ -165,7 +165,7 @@ pub trait Locatable {} /// rule. pub trait Synthesize { /// Prepare the element for show rule application. - fn synthesize(&mut self, styles: StyleChain); + fn synthesize(&mut self, vt: &mut Vt, styles: StyleChain) -> SourceResult<()>; } /// The base recipe for an element. diff --git a/src/model/styles.rs b/src/model/styles.rs index 82ec2ed5d..4b309ed04 100644 --- a/src/model/styles.rs +++ b/src/model/styles.rs @@ -1,3 +1,4 @@ +use std::any::{Any, TypeId}; use std::fmt::{self, Debug, Formatter, Write}; use std::iter; use std::mem; @@ -260,8 +261,12 @@ pub enum Selector { Label(Label), /// Matches text elements through a regular expression. Regex(Regex), + /// Matches elements with a specific capability. + Can(TypeId), /// Matches if any of the subselectors match. Any(EcoVec), + /// Matches if all of the subselectors match. + All(EcoVec), } impl Selector { @@ -270,6 +275,11 @@ impl Selector { Self::Regex(Regex::new(®ex::escape(text)).unwrap()) } + /// Define a simple [`Selector::Can`] selector. + pub fn can() -> Self { + Self::Can(TypeId::of::()) + } + /// Whether the selector matches for the target. pub fn matches(&self, target: &Content) -> bool { match self { @@ -285,7 +295,9 @@ impl Selector { target.func() == item!(text_func) && item!(text_str)(target).map_or(false, |text| regex.is_match(&text)) } + Self::Can(cap) => target.can_type_id(*cap), Self::Any(selectors) => selectors.iter().any(|sel| sel.matches(target)), + Self::All(selectors) => selectors.iter().all(|sel| sel.matches(target)), } } } @@ -303,8 +315,9 @@ impl Debug for Selector { } Self::Label(label) => label.fmt(f), Self::Regex(regex) => regex.fmt(f), - Self::Any(selectors) => { - f.write_str("any")?; + Self::Can(cap) => cap.fmt(f), + Self::Any(selectors) | Self::All(selectors) => { + f.write_str(if matches!(self, Self::Any(_)) { "any" } else { "all" })?; let pieces: Vec<_> = selectors.iter().map(|sel| eco_format!("{sel:?}")).collect(); f.write_str(&pretty_array_like(&pieces, false)) diff --git a/tests/ref/meta/figure.png b/tests/ref/meta/figure.png index c1b518d3bfd349775a5a5b4205645a98d9295b6e..a86b4d6d6b9abae3ade8b8a9498128d3beb03086 100644 GIT binary patch literal 103112 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 F{6AK)^fv$i literal 26011 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 { --- // Count figures. -#figure(numbering: "A", caption: [Four 'A's])[_AAAA!_] -#figure(numbering: none, caption: [Four 'B's])[_BBBB!_] -#figure(caption: [Four 'C's])[_CCCC!_] -#counter(figure).update(n => n + 3) -#figure(caption: [Four 'D's])[_DDDD!_] +#figure(numbering: "A", caption: [Four 'A's], kind: image, supplement: "Figure")[_AAAA!_] +#figure(numbering: none, caption: [Four 'B's], kind: image, supplement: "Figure")[_BBBB!_] +#figure(caption: [Four 'C's], kind: image, supplement: "Figure")[_CCCC!_] +#counter(figure.where(kind: image)).update(n => n + 3) +#figure(caption: [Four 'D's], kind: image, supplement: "Figure")[_DDDD!_] diff --git a/tests/typ/meta/figure.typ b/tests/typ/meta/figure.typ index 567e04310..3537bbe14 100644 --- a/tests/typ/meta/figure.typ +++ b/tests/typ/meta/figure.typ @@ -22,3 +22,83 @@ We can clearly see that @fig-cylinder and table(columns: 3)[a][b][c][d][e][f], caption: [The complex table.], ) + +--- + +// Testing figures with and without caption +#figure( + table( + columns: 2, + [First cylinder], + image("/cylinder.svg", height: 3cm), + ) +) + +#figure( + table( + columns: 2, + [Second cylinder], + image("/cylinder.svg", height: 3cm), + ), + caption: "A table containing images." +) + +--- + +// Testing show rules with figures with a simple theorem display +#show figure.where(kind: "theorem"): it => { + let name = none + if not it.caption == none { + name = [ #emph(it.caption)] + } else { + name = [] + } + + let title = none + if not it.numbering == none { + title = it.supplement + if not it.numbering == none { + title += " " + it.counter.display(it.numbering) + } + } + title = strong(title) + pad( + top: 0em, bottom: 0em, + block( + fill: green.lighten(90%), + stroke: 1pt + green, + inset: 10pt, + width: 100%, + radius: 5pt, + breakable: false, + [#title#name#h(0.1em):#h(0.2em)#it.body#v(0.5em)] + ) + ) +} + +#figure( + $a^2 + b^2 = c^2$, + supplement: "Theorem", + kind: "theorem", + caption: "Pythagoras' theorem.", + numbering: "1", +) + +#figure( + $a^2 + b^2 = c^2$, + supplement: "Theorem", + kind: "theorem", + caption: "Another Pythagoras' theorem.", + numbering: none, +) + +#figure( + caption: [Hello world in #emph[rust].], +)[ + #show raw: set align(left) + ```rust + fn main() { + println!("Hello, world!"); + } + ``` +] \ No newline at end of file diff --git a/tests/typ/meta/query.typ b/tests/typ/meta/query.typ index 8f8dcd3d7..7dfbbcfc4 100644 --- a/tests/typ/meta/query.typ +++ b/tests/typ/meta/query.typ @@ -61,6 +61,8 @@ #figure( rect[Just some stand-in text], + kind: image, + supplement: "Figure", caption: [Stand-in text], )