summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-02-02 11:53:39 +0100
committerGitHub <noreply@github.com>2024-02-02 10:53:39 +0000
commitf1ba218e8f05554cbc7ab8901c44b7c91f1d2f89 (patch)
treeea2e4bceed730e67fcd141680c86f26bced9dd90 /crates
parent154747590ef8cf89667d008a52cc288f8840b4bd (diff)
Use heading's own location for numbering (#3322)
Diffstat (limited to 'crates')
-rw-r--r--crates/typst/src/introspection/counter.rs4
-rw-r--r--crates/typst/src/math/equation.rs11
-rw-r--r--crates/typst/src/model/figure.rs10
-rw-r--r--crates/typst/src/model/heading.rs9
-rw-r--r--crates/typst/src/model/outline.rs2
-rw-r--r--crates/typst/src/model/reference.rs4
6 files changed, 23 insertions, 17 deletions
diff --git a/crates/typst/src/introspection/counter.rs b/crates/typst/src/introspection/counter.rs
index 2b4ccbbb..b87c8cfe 100644
--- a/crates/typst/src/introspection/counter.rs
+++ b/crates/typst/src/introspection/counter.rs
@@ -649,9 +649,9 @@ impl Show for Packed<DisplayElem> {
if func == HeadingElem::elem() {
HeadingElem::numbering_in(styles).clone()
} else if func == FigureElem::elem() {
- FigureElem::numbering_in(styles)
+ FigureElem::numbering_in(styles).clone()
} else if func == EquationElem::elem() {
- EquationElem::numbering_in(styles)
+ EquationElem::numbering_in(styles).clone()
} else {
None
}
diff --git a/crates/typst/src/math/equation.rs b/crates/typst/src/math/equation.rs
index 59aff4d5..9ad0979e 100644
--- a/crates/typst/src/math/equation.rs
+++ b/crates/typst/src/math/equation.rs
@@ -73,6 +73,7 @@ pub struct EquationElem {
/// With @ratio, we get:
/// $ F_n = floor(1 / sqrt(5) phi.alt^n) $
/// ```
+ #[borrowed]
pub numbering: Option<Numbering>,
/// A supplement for the equation.
@@ -243,7 +244,9 @@ impl LayoutSingle for Packed<EquationElem> {
if let Some(numbering) = (**self).numbering(styles) {
let pod = Regions::one(regions.base(), Axes::splat(false));
let counter = Counter::of(EquationElem::elem())
- .display(self.span(), Some(numbering), false)
+ .at(engine, self.location().unwrap())?
+ .display(engine, numbering)?
+ .spanned(self.span())
.layout(engine, styles, pod)?
.into_frame();
@@ -338,8 +341,8 @@ impl Refable for Packed<EquationElem> {
Counter::of(EquationElem::elem())
}
- fn numbering(&self) -> Option<Numbering> {
- (**self).numbering(StyleChain::default())
+ fn numbering(&self) -> Option<&Numbering> {
+ (**self).numbering(StyleChain::default()).as_ref()
}
}
@@ -365,7 +368,7 @@ impl Outlinable for Packed<EquationElem> {
let numbers = self
.counter()
.at(engine, self.location().unwrap())?
- .display(engine, &numbering)?;
+ .display(engine, numbering)?;
Ok(Some(supplement + numbers))
}
diff --git a/crates/typst/src/model/figure.rs b/crates/typst/src/model/figure.rs
index cac9a379..d30af5b8 100644
--- a/crates/typst/src/model/figure.rs
+++ b/crates/typst/src/model/figure.rs
@@ -192,6 +192,7 @@ pub struct FigureElem {
/// How to number the figure. Accepts a
/// [numbering pattern or function]($numbering).
#[default(Some(NumberingPattern::from_str("1").unwrap().into()))]
+ #[borrowed]
pub numbering: Option<Numbering>,
/// The vertical gap between the body and caption.
@@ -371,8 +372,8 @@ impl Refable for Packed<FigureElem> {
.unwrap_or_else(|| Counter::of(FigureElem::elem()))
}
- fn numbering(&self) -> Option<Numbering> {
- (**self).numbering(StyleChain::default())
+ fn numbering(&self) -> Option<&Numbering> {
+ (**self).numbering(StyleChain::default()).as_ref()
}
}
@@ -396,8 +397,9 @@ impl Outlinable for Packed<FigureElem> {
(**self).counter(),
self.numbering(),
) {
- let location = self.location().unwrap();
- let numbers = counter.at(engine, location)?.display(engine, &numbering)?;
+ let numbers = counter
+ .at(engine, self.location().unwrap())?
+ .display(engine, numbering)?;
if !supplement.is_empty() {
supplement += TextElem::packed('\u{a0}');
diff --git a/crates/typst/src/model/heading.rs b/crates/typst/src/model/heading.rs
index c3ed5275..02f40a15 100644
--- a/crates/typst/src/model/heading.rs
+++ b/crates/typst/src/model/heading.rs
@@ -147,11 +147,12 @@ impl Synthesize for Packed<HeadingElem> {
impl Show for Packed<HeadingElem> {
#[typst_macros::time(name = "heading", span = self.span())]
- fn show(&self, _: &mut Engine, styles: StyleChain) -> SourceResult<Content> {
+ fn show(&self, engine: &mut Engine, styles: StyleChain) -> SourceResult<Content> {
let mut realized = self.body().clone();
if let Some(numbering) = (**self).numbering(styles).as_ref() {
realized = Counter::of(HeadingElem::elem())
- .display(self.span(), Some(numbering.clone()), false)
+ .at(engine, self.location().unwrap())?
+ .display(engine, numbering)?
.spanned(self.span())
+ HElem::new(Em::new(0.3).into()).with_weak(true).pack()
+ realized;
@@ -205,8 +206,8 @@ impl Refable for Packed<HeadingElem> {
Counter::of(HeadingElem::elem())
}
- fn numbering(&self) -> Option<Numbering> {
- (**self).numbering(StyleChain::default()).clone()
+ fn numbering(&self) -> Option<&Numbering> {
+ (**self).numbering(StyleChain::default()).as_ref()
}
}
diff --git a/crates/typst/src/model/outline.rs b/crates/typst/src/model/outline.rs
index 14f711c6..8285673a 100644
--- a/crates/typst/src/model/outline.rs
+++ b/crates/typst/src/model/outline.rs
@@ -341,7 +341,7 @@ impl OutlineIndent {
let numbers = ancestor_outlinable
.counter()
.at(engine, ancestor.location().unwrap())?
- .display(engine, &numbering)?;
+ .display(engine, numbering)?;
hidden += numbers + SpaceElem::new().pack();
};
diff --git a/crates/typst/src/model/reference.rs b/crates/typst/src/model/reference.rs
index c6ec93a0..7109f2f5 100644
--- a/crates/typst/src/model/reference.rs
+++ b/crates/typst/src/model/reference.rs
@@ -220,7 +220,7 @@ impl Show for Packed<RefElem> {
let numbers = refable
.counter()
.at(engine, loc)?
- .display(engine, &numbering.trimmed())?;
+ .display(engine, &numbering.clone().trimmed())?;
let supplement = match self.supplement(styles).as_ref() {
Smart::Auto => refable.supplement(),
@@ -301,5 +301,5 @@ pub trait Refable {
fn counter(&self) -> Counter;
/// Returns the numbering of this element.
- fn numbering(&self) -> Option<Numbering>;
+ fn numbering(&self) -> Option<&Numbering>;
}