From 386af57ce691a126701aa1bf29225ddefac0c0ee Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 31 Oct 2023 20:26:34 -0400 Subject: [PATCH] Add intermediate stage for tables. --- src/intermediate/mod.rs | 2 ++ src/intermediate/table.rs | 20 ++++++++++++++++++-- src/intermediate/table_cell.rs | 21 +++++++++++++++++++++ src/intermediate/table_row.rs | 21 +++++++++++++++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 src/intermediate/table_cell.rs create mode 100644 src/intermediate/table_row.rs diff --git a/src/intermediate/mod.rs b/src/intermediate/mod.rs index f228fdb..7274f8a 100644 --- a/src/intermediate/mod.rs +++ b/src/intermediate/mod.rs @@ -56,6 +56,8 @@ mod strike_through; mod subscript; mod superscript; mod table; +mod table_cell; +mod table_row; mod target; mod timestamp; mod underline; diff --git a/src/intermediate/table.rs b/src/intermediate/table.rs index 39ab0df..aeb7f2f 100644 --- a/src/intermediate/table.rs +++ b/src/intermediate/table.rs @@ -1,5 +1,21 @@ -use super::macros::inoop; +use super::macros::intermediate; +use super::table_row::ITableRow; use crate::error::CustomError; -inoop!(ITable, Table); +#[derive(Debug, Clone)] +pub(crate) struct ITable { + pub(crate) children: Vec, +} + +intermediate!(ITable, Table, original, registry, { + let children = { + let mut ret = Vec::new(); + for obj in original.children.iter() { + ret.push(ITableRow::new(registry.clone(), obj).await?); + } + ret + }; + + Ok(ITable { children }) +}); diff --git a/src/intermediate/table_cell.rs b/src/intermediate/table_cell.rs new file mode 100644 index 0000000..212cf02 --- /dev/null +++ b/src/intermediate/table_cell.rs @@ -0,0 +1,21 @@ +use super::macros::intermediate; + +use super::IObject; +use crate::error::CustomError; + +#[derive(Debug, Clone)] +pub(crate) struct ITableCell { + pub(crate) children: Vec, +} + +intermediate!(ITableCell, TableCell, original, registry, { + let children = { + let mut ret = Vec::new(); + for obj in original.children.iter() { + ret.push(IObject::new(registry.clone(), obj).await?); + } + ret + }; + + Ok(ITableCell { children }) +}); diff --git a/src/intermediate/table_row.rs b/src/intermediate/table_row.rs new file mode 100644 index 0000000..9628d8e --- /dev/null +++ b/src/intermediate/table_row.rs @@ -0,0 +1,21 @@ +use super::macros::intermediate; + +use super::table_cell::ITableCell; +use crate::error::CustomError; + +#[derive(Debug, Clone)] +pub(crate) struct ITableRow { + pub(crate) children: Vec, +} + +intermediate!(ITableRow, TableRow, original, registry, { + let children = { + let mut ret = Vec::new(); + for obj in original.children.iter() { + ret.push(ITableCell::new(registry.clone(), obj).await?); + } + ret + }; + + Ok(ITableRow { children }) +});