diff --git a/default_environment/templates/html/table.dust b/default_environment/templates/html/table.dust index 5dbb8fe..a77e7c3 100644 --- a/default_environment/templates/html/table.dust +++ b/default_environment/templates/html/table.dust @@ -1 +1 @@ -!!!!!!!! table +{#.children}{>table_row/}{/.children}
diff --git a/default_environment/templates/html/table_cell.dust b/default_environment/templates/html/table_cell.dust new file mode 100644 index 0000000..e7c11ef --- /dev/null +++ b/default_environment/templates/html/table_cell.dust @@ -0,0 +1 @@ +{#.children}{>object/}{/.children} diff --git a/default_environment/templates/html/table_row.dust b/default_environment/templates/html/table_row.dust new file mode 100644 index 0000000..59b2384 --- /dev/null +++ b/default_environment/templates/html/table_row.dust @@ -0,0 +1 @@ +{#.children}{>table_cell/}{/.children} diff --git a/src/context/mod.rs b/src/context/mod.rs index f6203d8..2c412b3 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -54,6 +54,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/context/table.rs b/src/context/table.rs index 6b21b74..f460650 100644 --- a/src/context/table.rs +++ b/src/context/table.rs @@ -6,11 +6,37 @@ use crate::config::Config; use crate::error::CustomError; use crate::intermediate::ITable; -use super::macros::rnoop; +use super::macros::render; +use super::table_row::RenderTableRow; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "table")] -pub(crate) struct RenderTable {} +pub(crate) struct RenderTable { + children: Vec, +} -rnoop!(RenderTable, ITable); +render!( + RenderTable, + ITable, + original, + config, + output_directory, + output_file, + { + let children = { + let mut ret = Vec::new(); + for obj in original.children.iter() { + ret.push(RenderTableRow::new( + config, + output_directory, + output_file, + obj, + )?); + } + ret + }; + + Ok(RenderTable { children }) + } +); diff --git a/src/context/table_cell.rs b/src/context/table_cell.rs new file mode 100644 index 0000000..c2cef3c --- /dev/null +++ b/src/context/table_cell.rs @@ -0,0 +1,42 @@ +use std::path::Path; + +use serde::Serialize; + +use crate::config::Config; +use crate::error::CustomError; +use crate::intermediate::ITableCell; + +use super::macros::render; +use super::RenderObject; + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +#[serde(rename = "table_cell")] +pub(crate) struct RenderTableCell { + children: Vec, +} + +render!( + RenderTableCell, + ITableCell, + original, + config, + output_directory, + output_file, + { + let children = { + let mut ret = Vec::new(); + for obj in original.children.iter() { + ret.push(RenderObject::new( + config, + output_directory, + output_file, + obj, + )?); + } + ret + }; + + Ok(RenderTableCell { children }) + } +); diff --git a/src/context/table_row.rs b/src/context/table_row.rs new file mode 100644 index 0000000..c4da3a8 --- /dev/null +++ b/src/context/table_row.rs @@ -0,0 +1,42 @@ +use std::path::Path; + +use serde::Serialize; + +use crate::config::Config; +use crate::error::CustomError; +use crate::intermediate::ITableRow; + +use super::macros::render; +use super::table_cell::RenderTableCell; + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +#[serde(rename = "table_row")] +pub(crate) struct RenderTableRow { + children: Vec, +} + +render!( + RenderTableRow, + ITableRow, + original, + config, + output_directory, + output_file, + { + let children = { + let mut ret = Vec::new(); + for obj in original.children.iter() { + ret.push(RenderTableCell::new( + config, + output_directory, + output_file, + obj, + )?); + } + ret + }; + + Ok(RenderTableRow { children }) + } +); diff --git a/src/intermediate/mod.rs b/src/intermediate/mod.rs index f228fdb..fd969ef 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; @@ -119,6 +121,8 @@ pub(crate) use strike_through::IStrikeThrough; pub(crate) use subscript::ISubscript; pub(crate) use superscript::ISuperscript; pub(crate) use table::ITable; +pub(crate) use table_cell::ITableCell; +pub(crate) use table_row::ITableRow; pub(crate) use target::ITarget; pub(crate) use timestamp::ITimestamp; pub(crate) use underline::IUnderline; 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 }) +});