mirror of
https://github.com/typst/typst
synced 2025-05-20 03:55:29 +08:00
rename a few Current fields
This commit is contained in:
parent
9b5c77a3a3
commit
5e572a56f3
@ -76,28 +76,31 @@ pub struct Current {
|
|||||||
/// The initial size of the current region before we started subtracting.
|
/// The initial size of the current region before we started subtracting.
|
||||||
pub(super) initial: Size,
|
pub(super) initial: Size,
|
||||||
/// The amount of repeated header rows at the start of the current region.
|
/// The amount of repeated header rows at the start of the current region.
|
||||||
|
/// Thus, excludes rows from pending headers (which were placed for the
|
||||||
|
/// first time).
|
||||||
|
///
|
||||||
/// Note that `repeating_headers` and `pending_headers` can change if we
|
/// Note that `repeating_headers` and `pending_headers` can change if we
|
||||||
/// find a new header inside the region (not at the top), so this field
|
/// find a new header inside the region (not at the top), so this field
|
||||||
/// is required to access information from the top of the region.
|
/// is required to access information from the top of the region.
|
||||||
///
|
///
|
||||||
/// This is used for orphan prevention checks (if there are no rows other
|
/// This is used for orphan prevention checks (if there are no rows other
|
||||||
/// than repeated header rows upon finishing a region, we'd have an orphan).
|
/// than repeated header rows upon finishing a region, we'd have orphans).
|
||||||
/// Note that non-repeated and pending repeated header rows are not included
|
/// Note that non-repeated and pending repeated header rows are not included
|
||||||
/// in this number and thus use a separate mechanism for orphan prevention
|
/// in this number as they use a separate mechanism for orphan prevention
|
||||||
/// (`lrows_orphan_shapshot` field).
|
/// (`lrows_orphan_shapshot` field).
|
||||||
///
|
///
|
||||||
/// In addition, this information is used on finish region to calculate the
|
/// In addition, this information is used on finish region to calculate the
|
||||||
/// total height of resolved header rows at the top of the region, which is
|
/// total height of resolved header rows at the top of the region, which is
|
||||||
/// used by multi-page rowspans so they can properly skip the header rows
|
/// used by multi-page rowspans so they can properly skip the header rows
|
||||||
/// at the top of the region during layout.
|
/// at the top of the region during layout.
|
||||||
pub(super) current_repeating_header_rows: usize,
|
pub(super) repeated_header_rows: usize,
|
||||||
/// The end bound of the last repeating header at the start of the region.
|
/// The end bound of the last repeating header at the start of the region.
|
||||||
/// The last row might have disappeared due to being empty, so this is how
|
/// The last row might have disappeared due to being empty, so this is how
|
||||||
/// we can become aware of that. Line layout uses this to determine when to
|
/// we can become aware of that. Line layout uses this to determine when to
|
||||||
/// prioritize the last lines under a header.
|
/// prioritize the last lines under a header.
|
||||||
///
|
///
|
||||||
/// A value of zero indicates no headers were placed.
|
/// A value of zero indicates no headers were placed.
|
||||||
pub(super) current_last_repeated_header_end: usize,
|
pub(super) last_repeated_header_end: usize,
|
||||||
/// Stores the length of `lrows` before a sequence of trailing rows
|
/// Stores the length of `lrows` before a sequence of trailing rows
|
||||||
/// equipped with orphan prevention were laid out. In this case, if no more
|
/// equipped with orphan prevention were laid out. In this case, if no more
|
||||||
/// rows are laid out after those rows before the region ends, the rows
|
/// rows are laid out after those rows before the region ends, the rows
|
||||||
@ -105,7 +108,9 @@ pub struct Current {
|
|||||||
/// headers will have been moved to the `pending_headers` vector and so
|
/// headers will have been moved to the `pending_headers` vector and so
|
||||||
/// will automatically be placed again until they fit.
|
/// will automatically be placed again until they fit.
|
||||||
pub(super) lrows_orphan_snapshot: Option<usize>,
|
pub(super) lrows_orphan_snapshot: Option<usize>,
|
||||||
/// The simulated header height.
|
/// The total simulated height for all headers currently in
|
||||||
|
/// `repeating_headers` and `pending_headers`.
|
||||||
|
///
|
||||||
/// This field is reset in `layout_header` and properly updated by
|
/// This field is reset in `layout_header` and properly updated by
|
||||||
/// `layout_auto_row` and `layout_relative_row`, and should not be read
|
/// `layout_auto_row` and `layout_relative_row`, and should not be read
|
||||||
/// before all header rows are fully laid out. It is usually fine because
|
/// before all header rows are fully laid out. It is usually fine because
|
||||||
@ -126,6 +131,7 @@ pub struct Current {
|
|||||||
/// header being found.
|
/// header being found.
|
||||||
pub(super) repeating_header_heights: Vec<Abs>,
|
pub(super) repeating_header_heights: Vec<Abs>,
|
||||||
/// The simulated footer height for this region.
|
/// The simulated footer height for this region.
|
||||||
|
///
|
||||||
/// The simulation occurs before any rows are laid out for a region.
|
/// The simulation occurs before any rows are laid out for a region.
|
||||||
pub(super) footer_height: Abs,
|
pub(super) footer_height: Abs,
|
||||||
}
|
}
|
||||||
@ -204,8 +210,8 @@ impl<'a> GridLayouter<'a> {
|
|||||||
current_row_height: None,
|
current_row_height: None,
|
||||||
current: Current {
|
current: Current {
|
||||||
initial: regions.size,
|
initial: regions.size,
|
||||||
current_repeating_header_rows: 0,
|
repeated_header_rows: 0,
|
||||||
current_last_repeated_header_end: 0,
|
last_repeated_header_end: 0,
|
||||||
lrows_orphan_snapshot: None,
|
lrows_orphan_snapshot: None,
|
||||||
header_height: Abs::zero(),
|
header_height: Abs::zero(),
|
||||||
repeating_header_height: Abs::zero(),
|
repeating_header_height: Abs::zero(),
|
||||||
@ -1482,8 +1488,8 @@ impl<'a> GridLayouter<'a> {
|
|||||||
if let Some(orphan_snapshot) = self.current.lrows_orphan_snapshot.take() {
|
if let Some(orphan_snapshot) = self.current.lrows_orphan_snapshot.take() {
|
||||||
if !last {
|
if !last {
|
||||||
self.lrows.truncate(orphan_snapshot);
|
self.lrows.truncate(orphan_snapshot);
|
||||||
self.current.current_repeating_header_rows =
|
self.current.repeated_header_rows =
|
||||||
self.current.current_repeating_header_rows.min(orphan_snapshot);
|
self.current.repeated_header_rows.min(orphan_snapshot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1494,13 +1500,13 @@ impl<'a> GridLayouter<'a> {
|
|||||||
{
|
{
|
||||||
// Remove the last row in the region if it is a gutter row.
|
// Remove the last row in the region if it is a gutter row.
|
||||||
self.lrows.pop().unwrap();
|
self.lrows.pop().unwrap();
|
||||||
self.current.current_repeating_header_rows =
|
self.current.repeated_header_rows =
|
||||||
self.current.current_repeating_header_rows.min(self.lrows.len());
|
self.current.repeated_header_rows.min(self.lrows.len());
|
||||||
}
|
}
|
||||||
|
|
||||||
let footer_would_be_widow = if let Some(last_header_row) = self
|
let footer_would_be_widow = if let Some(last_header_row) = self
|
||||||
.current
|
.current
|
||||||
.current_repeating_header_rows
|
.repeated_header_rows
|
||||||
.checked_sub(1)
|
.checked_sub(1)
|
||||||
.and_then(|last_header_index| self.lrows.get(last_header_index))
|
.and_then(|last_header_index| self.lrows.get(last_header_index))
|
||||||
{
|
{
|
||||||
@ -1512,7 +1518,7 @@ impl<'a> GridLayouter<'a> {
|
|||||||
.as_ref()
|
.as_ref()
|
||||||
.and_then(Repeatable::as_repeated)
|
.and_then(Repeatable::as_repeated)
|
||||||
.is_none_or(|footer| footer.start != last_header_end)
|
.is_none_or(|footer| footer.start != last_header_end)
|
||||||
&& self.lrows.len() == self.current.current_repeating_header_rows
|
&& self.lrows.len() == self.current.repeated_header_rows
|
||||||
&& may_progress_with_offset(
|
&& may_progress_with_offset(
|
||||||
self.regions,
|
self.regions,
|
||||||
// Since we're trying to find a region where to place all
|
// Since we're trying to find a region where to place all
|
||||||
@ -1525,8 +1531,8 @@ impl<'a> GridLayouter<'a> {
|
|||||||
// Header and footer would be alone in this region, but there are more
|
// Header and footer would be alone in this region, but there are more
|
||||||
// rows beyond the header and the footer. Push an empty region.
|
// rows beyond the header and the footer. Push an empty region.
|
||||||
self.lrows.clear();
|
self.lrows.clear();
|
||||||
self.current.current_last_repeated_header_end = 0;
|
self.current.last_repeated_header_end = 0;
|
||||||
self.current.current_repeating_header_rows = 0;
|
self.current.repeated_header_rows = 0;
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
@ -1598,7 +1604,7 @@ impl<'a> GridLayouter<'a> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let height = frame.height();
|
let height = frame.height();
|
||||||
if i < self.current.current_repeating_header_rows {
|
if i < self.current.repeated_header_rows {
|
||||||
header_row_height += height;
|
header_row_height += height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1698,15 +1704,15 @@ impl<'a> GridLayouter<'a> {
|
|||||||
output,
|
output,
|
||||||
rrows,
|
rrows,
|
||||||
FinishedHeaderRowInfo {
|
FinishedHeaderRowInfo {
|
||||||
repeated: self.current.current_repeating_header_rows,
|
repeated: self.current.repeated_header_rows,
|
||||||
last_repeated_header_end: self.current.current_last_repeated_header_end,
|
last_repeated_header_end: self.current.last_repeated_header_end,
|
||||||
height: header_row_height,
|
height: header_row_height,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
if !last {
|
if !last {
|
||||||
self.current.current_repeating_header_rows = 0;
|
self.current.repeated_header_rows = 0;
|
||||||
self.current.current_last_repeated_header_end = 0;
|
self.current.last_repeated_header_end = 0;
|
||||||
self.current.header_height = Abs::zero();
|
self.current.header_height = Abs::zero();
|
||||||
self.current.repeating_header_height = Abs::zero();
|
self.current.repeating_header_height = Abs::zero();
|
||||||
self.current.repeating_header_heights.clear();
|
self.current.repeating_header_heights.clear();
|
||||||
|
@ -266,7 +266,7 @@ impl<'a> GridLayouter<'a> {
|
|||||||
// within 'layout_row'.
|
// within 'layout_row'.
|
||||||
self.unbreakable_rows_left += repeating_header_rows + pending_header_rows;
|
self.unbreakable_rows_left += repeating_header_rows + pending_header_rows;
|
||||||
|
|
||||||
self.current.current_last_repeated_header_end =
|
self.current.last_repeated_header_end =
|
||||||
self.repeating_headers.last().map(|h| h.end).unwrap_or_default();
|
self.repeating_headers.last().map(|h| h.end).unwrap_or_default();
|
||||||
|
|
||||||
// Reset the header height for this region.
|
// Reset the header height for this region.
|
||||||
@ -306,7 +306,7 @@ impl<'a> GridLayouter<'a> {
|
|||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.current.current_repeating_header_rows = self.lrows.len();
|
self.current.repeated_header_rows = self.lrows.len();
|
||||||
|
|
||||||
if !self.pending_headers.is_empty() {
|
if !self.pending_headers.is_empty() {
|
||||||
// Restore snapshot: if pending headers placed again turn out to be
|
// Restore snapshot: if pending headers placed again turn out to be
|
||||||
|
@ -537,7 +537,7 @@ impl GridLayouter<'_> {
|
|||||||
// and unbreakable rows in general, so there is no risk
|
// and unbreakable rows in general, so there is no risk
|
||||||
// of accessing an incomplete list of rows.
|
// of accessing an incomplete list of rows.
|
||||||
let initial_header_height = self.lrows
|
let initial_header_height = self.lrows
|
||||||
[..self.current.current_repeating_header_rows]
|
[..self.current.repeated_header_rows]
|
||||||
.iter()
|
.iter()
|
||||||
.map(|row| match row {
|
.map(|row| match row {
|
||||||
Row::Frame(frame, _, _) => frame.height(),
|
Row::Frame(frame, _, _) => frame.height(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user