summaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
Diffstat (limited to 'library')
-rw-r--r--library/src/layout/container.rs4
-rw-r--r--library/src/layout/table.rs12
-rw-r--r--library/src/math/frac.rs1
-rw-r--r--library/src/math/root.rs1
-rw-r--r--library/src/meta/bibliography.rs10
-rw-r--r--library/src/text/deco.rs2
-rw-r--r--library/src/visualize/image.rs2
-rw-r--r--library/src/visualize/line.rs2
-rw-r--r--library/src/visualize/shape.rs9
9 files changed, 29 insertions, 14 deletions
diff --git a/library/src/layout/container.rs b/library/src/layout/container.rs
index 009063f0..a48933a7 100644
--- a/library/src/layout/container.rs
+++ b/library/src/layout/container.rs
@@ -141,7 +141,7 @@ impl Layout for BoxNode {
if fill.is_some() || stroke.iter().any(Option::is_some) {
let outset = self.outset(styles);
let radius = self.radius(styles);
- frame.fill_and_stroke(fill, stroke, outset, radius);
+ frame.fill_and_stroke(fill, stroke, outset, radius, self.span());
}
// Apply metadata.
@@ -383,7 +383,7 @@ impl Layout for BlockNode {
let outset = self.outset(styles);
let radius = self.radius(styles);
for frame in frames.iter_mut().skip(skip as usize) {
- frame.fill_and_stroke(fill, stroke, outset, radius);
+ frame.fill_and_stroke(fill, stroke, outset, radius, self.span());
}
}
diff --git a/library/src/layout/table.rs b/library/src/layout/table.rs
index 012e63ac..6daafdbb 100644
--- a/library/src/layout/table.rs
+++ b/library/src/layout/table.rs
@@ -166,14 +166,20 @@ impl Layout for TableNode {
for offset in points(rows.iter().map(|piece| piece.height)) {
let target = Point::with_x(frame.width() + thickness);
let hline = Geometry::Line(target).stroked(stroke);
- frame.prepend(Point::new(-half, offset), Element::Shape(hline));
+ frame.prepend(
+ Point::new(-half, offset),
+ Element::Shape(hline, self.span()),
+ );
}
// Render vertical lines.
for offset in points(layout.cols.iter().copied()) {
let target = Point::with_y(frame.height() + thickness);
let vline = Geometry::Line(target).stroked(stroke);
- frame.prepend(Point::new(offset, -half), Element::Shape(vline));
+ frame.prepend(
+ Point::new(offset, -half),
+ Element::Shape(vline, self.span()),
+ );
}
}
@@ -186,7 +192,7 @@ impl Layout for TableNode {
let pos = Point::new(dx, dy);
let size = Size::new(col, row.height);
let rect = Geometry::Rect(size).filled(fill);
- frame.prepend(pos, Element::Shape(rect));
+ frame.prepend(pos, Element::Shape(rect, self.span()));
}
dy += row.height;
}
diff --git a/library/src/math/frac.rs b/library/src/math/frac.rs
index f670159d..90bc69b3 100644
--- a/library/src/math/frac.rs
+++ b/library/src/math/frac.rs
@@ -137,6 +137,7 @@ fn layout(
paint: TextNode::fill_in(ctx.styles()),
thickness,
}),
+ span,
),
);
ctx.push(FrameFragment::new(ctx, frame));
diff --git a/library/src/math/root.rs b/library/src/math/root.rs
index 1ab99b2b..b4756b9d 100644
--- a/library/src/math/root.rs
+++ b/library/src/math/root.rs
@@ -127,6 +127,7 @@ fn layout(
Element::Shape(
Geometry::Line(Point::with_x(radicand.width()))
.stroked(Stroke { paint: TextNode::fill_in(ctx.styles()), thickness }),
+ span,
),
);
diff --git a/library/src/meta/bibliography.rs b/library/src/meta/bibliography.rs
index 8549624a..e9990524 100644
--- a/library/src/meta/bibliography.rs
+++ b/library/src/meta/bibliography.rs
@@ -285,6 +285,7 @@ fn create(
bibliography: &BibliographyNode,
citations: Vec<&CiteNode>,
) -> Arc<Works> {
+ let span = bibliography.span();
let entries = load(world, &bibliography.path()).unwrap();
let style = bibliography.style(StyleChain::default());
let bib_id = bibliography.0.stable_id().unwrap();
@@ -369,7 +370,7 @@ fn create(
}
// Format and link to the reference entry.
- content += format_display_string(&display, supplement)
+ content += format_display_string(&display, supplement, citation.span())
.linked(Link::Node(ref_id(entry)));
}
@@ -410,12 +411,12 @@ fn create(
let prefix = reference.prefix.map(|prefix| {
// Format and link to first citation.
let bracketed = prefix.with_default_brackets(&*citation_style);
- format_display_string(&bracketed, None)
+ format_display_string(&bracketed, None, span)
.linked(Link::Node(ids[reference.entry.key()]))
.styled(backlink.clone())
});
- let mut reference = format_display_string(&reference.display, None);
+ let mut reference = format_display_string(&reference.display, None, span);
if prefix.is_none() {
reference = reference.styled(backlink);
}
@@ -471,6 +472,7 @@ const SUPPLEMENT: &str = "cdc579c45cf3d648905c142c7082683f";
fn format_display_string(
string: &DisplayString,
mut supplement: Option<Content>,
+ span: Span,
) -> Content {
let mut stops: Vec<_> = string
.formatting
@@ -498,7 +500,7 @@ fn format_display_string(
let mut content = if segment == SUPPLEMENT && supplement.is_some() {
supplement.take().unwrap_or_default()
} else {
- TextNode::packed(segment)
+ TextNode::packed(segment).spanned(span)
};
for (range, fmt) in &string.formatting {
diff --git a/library/src/text/deco.rs b/library/src/text/deco.rs
index 27d30286..a29564f3 100644
--- a/library/src/text/deco.rs
+++ b/library/src/text/deco.rs
@@ -285,7 +285,7 @@ pub(super) fn decorate(
if target.x >= min_width || !deco.evade {
let shape = Geometry::Line(target).stroked(stroke);
- frame.push(origin, Element::Shape(shape));
+ frame.push(origin, Element::Shape(shape, Span::detached()));
}
};
diff --git a/library/src/visualize/image.rs b/library/src/visualize/image.rs
index 4509cf5a..129e07c5 100644
--- a/library/src/visualize/image.rs
+++ b/library/src/visualize/image.rs
@@ -97,7 +97,7 @@ impl Layout for ImageNode {
// the frame to the target size, center aligning the image in the
// process.
let mut frame = Frame::new(fitted);
- frame.push(Point::zero(), Element::Image(image, fitted));
+ frame.push(Point::zero(), Element::Image(image, fitted, self.span()));
frame.resize(target, Align::CENTER_HORIZON);
// Create a clipping group if only part of the image should be visible.
diff --git a/library/src/visualize/line.rs b/library/src/visualize/line.rs
index b39170f0..6614e3ee 100644
--- a/library/src/visualize/line.rs
+++ b/library/src/visualize/line.rs
@@ -76,7 +76,7 @@ impl Layout for LineNode {
let mut frame = Frame::new(target);
let shape = Geometry::Line(delta.to_point()).stroked(stroke);
- frame.push(start.to_point(), Element::Shape(shape));
+ frame.push(start.to_point(), Element::Shape(shape, self.span()));
Ok(Fragment::frame(frame))
}
}
diff --git a/library/src/visualize/shape.rs b/library/src/visualize/shape.rs
index 02b45ed5..de459949 100644
--- a/library/src/visualize/shape.rs
+++ b/library/src/visualize/shape.rs
@@ -158,6 +158,7 @@ impl Layout for RectNode {
self.inset(styles),
self.outset(styles),
self.radius(styles),
+ self.span(),
)
}
}
@@ -267,6 +268,7 @@ impl Layout for SquareNode {
self.inset(styles),
self.outset(styles),
self.radius(styles),
+ self.span(),
)
}
}
@@ -348,6 +350,7 @@ impl Layout for EllipseNode {
self.inset(styles),
self.outset(styles),
Corners::splat(Rel::zero()),
+ self.span(),
)
}
}
@@ -454,6 +457,7 @@ impl Layout for CircleNode {
self.inset(styles),
self.outset(styles),
Corners::splat(Rel::zero()),
+ self.span(),
)
}
}
@@ -471,6 +475,7 @@ fn layout(
mut inset: Sides<Rel<Abs>>,
outset: Sides<Rel<Abs>>,
radius: Corners<Rel<Abs>>,
+ span: Span,
) -> SourceResult<Fragment> {
let resolved = sizing
.zip(regions.base())
@@ -524,9 +529,9 @@ fn layout(
let size = frame.size() + outset.sum_by_axis();
let pos = Point::new(-outset.left, -outset.top);
let shape = ellipse(size, fill, stroke.left);
- frame.prepend(pos, Element::Shape(shape));
+ frame.prepend(pos, Element::Shape(shape, span));
} else {
- frame.fill_and_stroke(fill, stroke, outset, radius);
+ frame.fill_and_stroke(fill, stroke, outset, radius, span);
}
}