use crate::tokens::ControlWord;
#[derive(Debug, Default, Clone, PartialEq)]
pub struct Paragraph {
pub alignment: Alignment,
pub spacing: Spacing,
pub indent: Indentation,
pub tab_width: i32,
}
#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub enum Alignment {
#[default]
LeftAligned,
RightAligned,
Center,
Justify,
}
impl From<&ControlWord<'_>> for Alignment {
fn from(cw: &ControlWord) -> Self {
return match cw {
ControlWord::LeftAligned => Alignment::LeftAligned,
ControlWord::RightAligned => Alignment::RightAligned,
ControlWord::Center => Alignment::Center,
ControlWord::Justify => Alignment::Justify,
_ => Alignment::LeftAligned,
};
}
}
#[derive(Debug, Default, Clone, PartialEq)]
pub struct Spacing {
pub before: i32,
pub after: i32,
pub between_line: SpaceBetweenLine,
pub line_multiplier: i32,
}
#[derive(Default, Debug, Clone, PartialEq)]
pub enum SpaceBetweenLine {
Value(i32),
#[default]
Auto,
Invalid,
}
impl From<i32> for SpaceBetweenLine {
fn from(value: i32) -> Self {
return match value {
1000 => SpaceBetweenLine::Auto,
val if val < 0 => SpaceBetweenLine::Value(val.abs()),
val => SpaceBetweenLine::Value(val),
};
}
}
#[derive(Default, Debug, Clone, PartialEq)]
pub struct Indentation {
pub left: i32,
pub right: i32,
pub first_line: i32,
}