use serde::Serialize;
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct BBox {
pub x0: f32,
pub y0: f32,
pub x1: f32,
pub y1: f32,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct Inline {
pub text: String,
pub bold: bool,
pub italic: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct Line {
pub inlines: Vec<Inline>,
pub y: f32,
pub x: f32,
pub end_x: f32,
pub size: f32,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub enum Marker {
Bullet,
Number(u32),
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct ListItem {
pub marker: Marker,
pub marker_len: usize,
pub lines: Vec<Line>,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct Cell {
pub line: Option<Line>,
pub colspan: u8,
pub rowspan: u8,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub enum Role {
Body,
PageHeader,
PageFooter,
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub enum Block {
Heading {
level: u8,
lines: Vec<Line>,
bbox: BBox,
},
Paragraph {
lines: Vec<Line>,
bbox: BBox,
role: Role,
},
List {
items: Vec<ListItem>,
bbox: BBox,
},
Table {
rows: Vec<Vec<Cell>>,
bbox: BBox,
},
}
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct PageLayout {
pub blocks: Vec<Block>,
}