use crate::{Block, LayoutHint, SourceSpan};
#[must_use]
pub const fn block_layout(block: &Block) -> Option<&LayoutHint> {
match block {
Block::Paragraph { layout, .. }
| Block::Preformatted { layout, .. }
| Block::List { layout, .. }
| Block::DefinitionList { layout, .. }
| Block::Table { layout, .. }
| Block::Equation { layout, .. }
| Block::Unsupported { layout, .. } => Some(layout),
Block::VerticalSpace { .. } | Block::ThematicBreak { .. } => None,
}
}
#[must_use]
pub const fn block_layout_mut(block: &mut Block) -> Option<&mut LayoutHint> {
match block {
Block::Paragraph { layout, .. }
| Block::Preformatted { layout, .. }
| Block::List { layout, .. }
| Block::DefinitionList { layout, .. }
| Block::Table { layout, .. }
| Block::Equation { layout, .. }
| Block::Unsupported { layout, .. } => Some(layout),
Block::VerticalSpace { .. } | Block::ThematicBreak { .. } => None,
}
}
#[must_use]
pub const fn block_source(block: &Block) -> Option<SourceSpan> {
match block {
Block::Paragraph { source, .. }
| Block::Preformatted { source, .. }
| Block::List { source, .. }
| Block::DefinitionList { source, .. }
| Block::Table { source, .. }
| Block::Equation { source, .. }
| Block::VerticalSpace { source, .. }
| Block::ThematicBreak { source }
| Block::Unsupported { source, .. } => *source,
}
}
pub fn rebase_roots(blocks: &mut [Block], old_parent: i32, new_parent: i32) {
for block in blocks {
if let Some(layout) = block_layout_mut(block) {
layout.indent_columns =
super::rebase_origin(layout.indent_columns, old_parent, new_parent);
}
}
}
#[cfg(test)]
mod tests;