mirror of
https://github.com/typst/typst
synced 2025-05-14 17:15:28 +08:00
Merge 2a3c6f5ffec7bd7d68bfc57e069653bb3517522e into 9b09146a6b5e936966ed7ee73bce9dd2df3810ae
This commit is contained in:
commit
9d92c401bd
@ -235,7 +235,10 @@ impl Outlinable for Packed<EquationElem> {
|
|||||||
self.block(StyleChain::default()) && self.numbering().is_some()
|
self.block(StyleChain::default()) && self.numbering().is_some()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn prefix(&self, numbers: Content) -> Content {
|
fn prefix(&self, numbers: Content, add_supplement: Smart<bool>) -> Content {
|
||||||
|
if add_supplement == Smart::Custom(false) {
|
||||||
|
return numbers;
|
||||||
|
}
|
||||||
let supplement = self.supplement();
|
let supplement = self.supplement();
|
||||||
if !supplement.is_empty() {
|
if !supplement.is_empty() {
|
||||||
supplement + TextElem::packed('\u{a0}') + numbers
|
supplement + TextElem::packed('\u{a0}') + numbers
|
||||||
|
@ -436,7 +436,10 @@ impl Outlinable for Packed<FigureElem> {
|
|||||||
|| self.numbering().is_some())
|
|| self.numbering().is_some())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn prefix(&self, numbers: Content) -> Content {
|
fn prefix(&self, numbers: Content, add_supplement: Smart<bool>) -> Content {
|
||||||
|
if add_supplement == Smart::Custom(false) {
|
||||||
|
return numbers;
|
||||||
|
}
|
||||||
let supplement = self.supplement();
|
let supplement = self.supplement();
|
||||||
if !supplement.is_empty() {
|
if !supplement.is_empty() {
|
||||||
supplement + TextElem::packed('\u{a0}') + numbers
|
supplement + TextElem::packed('\u{a0}') + numbers
|
||||||
|
@ -364,8 +364,17 @@ impl Outlinable for Packed<HeadingElem> {
|
|||||||
(**self).resolve_level(StyleChain::default())
|
(**self).resolve_level(StyleChain::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn prefix(&self, numbers: Content) -> Content {
|
fn prefix(&self, numbers: Content, add_supplement: Smart<bool>) -> Content {
|
||||||
numbers
|
if add_supplement == Smart::Custom(true) {
|
||||||
|
let supplement = self.supplement();
|
||||||
|
if !supplement.is_empty() {
|
||||||
|
supplement + TextElem::packed('\u{a0}') + numbers
|
||||||
|
} else {
|
||||||
|
numbers
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
numbers
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn body(&self) -> Content {
|
fn body(&self) -> Content {
|
||||||
|
@ -357,7 +357,7 @@ pub trait Outlinable: Refable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs the default prefix given the formatted numbering.
|
/// Constructs the default prefix given the formatted numbering.
|
||||||
fn prefix(&self, numbers: Content) -> Content;
|
fn prefix(&self, numbers: Content, add_supplement: Smart<bool>) -> Content;
|
||||||
|
|
||||||
/// The body of the entry.
|
/// The body of the entry.
|
||||||
fn body(&self) -> Content;
|
fn body(&self) -> Content;
|
||||||
@ -421,7 +421,7 @@ impl Show for Packed<OutlineEntry> {
|
|||||||
let context = Context::new(None, Some(styles));
|
let context = Context::new(None, Some(styles));
|
||||||
let context = context.track();
|
let context = context.track();
|
||||||
|
|
||||||
let prefix = self.prefix(engine, context, span)?;
|
let prefix = self.prefix(engine, context, span, Smart::Auto)?;
|
||||||
let inner = self.inner(engine, context, span)?;
|
let inner = self.inner(engine, context, span)?;
|
||||||
let block = if self.element.is::<EquationElem>() {
|
let block = if self.element.is::<EquationElem>() {
|
||||||
let body = prefix.unwrap_or_default() + inner;
|
let body = prefix.unwrap_or_default() + inner;
|
||||||
@ -542,16 +542,21 @@ impl OutlineEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Formats the element's numbering (if any).
|
/// Formats the element's numbering (if any).
|
||||||
///
|
|
||||||
/// This also appends the element's supplement in case of figures or
|
|
||||||
/// equations. For instance, it would output `1.1` for a heading, but
|
|
||||||
/// `Figure 1` for a figure, as is usual for outlines.
|
|
||||||
#[func(contextual)]
|
#[func(contextual)]
|
||||||
pub fn prefix(
|
pub fn prefix(
|
||||||
&self,
|
&self,
|
||||||
engine: &mut Engine,
|
engine: &mut Engine,
|
||||||
context: Tracked<Context>,
|
context: Tracked<Context>,
|
||||||
span: Span,
|
span: Span,
|
||||||
|
/// Whether to add the element's supplement if it has one.
|
||||||
|
///
|
||||||
|
/// If set to `{auto}`, the supplement is added for figures and
|
||||||
|
/// equations that have one. For instance, it would output `[1.1]`
|
||||||
|
/// for a heading, but `[Figure 1]` for a figure, as is usual for
|
||||||
|
/// outlines.
|
||||||
|
#[named]
|
||||||
|
#[default]
|
||||||
|
add_supplement: Smart<bool>,
|
||||||
) -> SourceResult<Option<Content>> {
|
) -> SourceResult<Option<Content>> {
|
||||||
let outlinable = self.outlinable().at(span)?;
|
let outlinable = self.outlinable().at(span)?;
|
||||||
let Some(numbering) = outlinable.numbering() else { return Ok(None) };
|
let Some(numbering) = outlinable.numbering() else { return Ok(None) };
|
||||||
@ -559,7 +564,7 @@ impl OutlineEntry {
|
|||||||
let styles = context.styles().at(span)?;
|
let styles = context.styles().at(span)?;
|
||||||
let numbers =
|
let numbers =
|
||||||
outlinable.counter().display_at_loc(engine, loc, styles, numbering)?;
|
outlinable.counter().display_at_loc(engine, loc, styles, numbering)?;
|
||||||
Ok(Some(outlinable.prefix(numbers)))
|
Ok(Some(outlinable.prefix(numbers, add_supplement)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates the default inner content of the entry.
|
/// Creates the default inner content of the entry.
|
||||||
|
BIN
tests/ref/outline-entry-force-supplement.png
Normal file
BIN
tests/ref/outline-entry-force-supplement.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
BIN
tests/ref/outline-entry-no-supplement.png
Normal file
BIN
tests/ref/outline-entry-no-supplement.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
@ -171,6 +171,46 @@
|
|||||||
== Middle heading
|
== Middle heading
|
||||||
=== Lower heading
|
=== Lower heading
|
||||||
|
|
||||||
|
--- outline-entry-force-supplement ---
|
||||||
|
#set page(width: 200pt)
|
||||||
|
#set heading(numbering: "1.", supplement: [Chapter])
|
||||||
|
|
||||||
|
#show outline.entry.where(level: 1): it => link(
|
||||||
|
it.element.location(),
|
||||||
|
it.indented(
|
||||||
|
it.prefix(add-supplement: true),
|
||||||
|
it.inner(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#outline()
|
||||||
|
|
||||||
|
= Top
|
||||||
|
== Middle
|
||||||
|
=== Lower
|
||||||
|
== Middle Again
|
||||||
|
= Top again
|
||||||
|
#set heading(numbering: none)
|
||||||
|
= Top again again
|
||||||
|
|
||||||
|
--- outline-entry-no-supplement ---
|
||||||
|
#set page(width: 200pt)
|
||||||
|
#set math.equation(numbering: "(i)", supplement: [Eq])
|
||||||
|
|
||||||
|
#show outline.entry.where(level: 1): it => link(
|
||||||
|
it.element.location(),
|
||||||
|
it.indented(
|
||||||
|
it.prefix(add-supplement: false),
|
||||||
|
it.inner(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#outline(target: math.equation)
|
||||||
|
|
||||||
|
$ 1 $
|
||||||
|
#set math.equation(numbering: none)
|
||||||
|
$ 2 $
|
||||||
|
|
||||||
--- outline-entry-inner ---
|
--- outline-entry-inner ---
|
||||||
#set heading(numbering: "1.")
|
#set heading(numbering: "1.")
|
||||||
#show outline.entry: it => block(it.inner())
|
#show outline.entry: it => block(it.inner())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user