diff --git a/default_environment/templates/html/table.dust b/default_environment/templates/html/table.dust index 4a5eb5d..8995220 100644 --- a/default_environment/templates/html/table.dust +++ b/default_environment/templates/html/table.dust @@ -1 +1,5 @@ -{#.children}{>table_row/}{/.children}
+{#.children}{@select key=.type} + {@eq value="head"}{>table_head/}{/eq} + {@eq value="body"}{>table_body/}{/eq} + {@none}{!TODO: make this panic!}ERROR: Unrecognized type {.type}.{/none} +{/select}{/.children}
diff --git a/default_environment/templates/html/table_body.dust b/default_environment/templates/html/table_body.dust new file mode 100644 index 0000000..1044fa4 --- /dev/null +++ b/default_environment/templates/html/table_body.dust @@ -0,0 +1 @@ +{#.children}{>table_row/}{/.children} diff --git a/default_environment/templates/html/table_head.dust b/default_environment/templates/html/table_head.dust new file mode 100644 index 0000000..8a028de --- /dev/null +++ b/default_environment/templates/html/table_head.dust @@ -0,0 +1 @@ +{#.children}{>table_head_row/}{/.children} diff --git a/default_environment/templates/html/table_head_cell.dust b/default_environment/templates/html/table_head_cell.dust new file mode 100644 index 0000000..f58637b --- /dev/null +++ b/default_environment/templates/html/table_head_cell.dust @@ -0,0 +1 @@ +{#.children}{>object/}{/.children} diff --git a/default_environment/templates/html/table_head_row.dust b/default_environment/templates/html/table_head_row.dust new file mode 100644 index 0000000..957a659 --- /dev/null +++ b/default_environment/templates/html/table_head_row.dust @@ -0,0 +1 @@ +{#.children}{>table_head_cell/}{/.children} diff --git a/src/context/mod.rs b/src/context/mod.rs index adff5cf..8594f5d 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -59,6 +59,7 @@ mod subscript; mod superscript; mod table; mod table_cell; +mod table_group; mod table_row; mod target; mod timestamp; diff --git a/src/context/table.rs b/src/context/table.rs index 045d7a6..d5cf721 100644 --- a/src/context/table.rs +++ b/src/context/table.rs @@ -1,8 +1,10 @@ use serde::Serialize; use super::render_context::RenderContext; +use super::table_group::RenderTableGroup; use crate::error::CustomError; use crate::intermediate::ITable; +use crate::intermediate::ITableGroup; use super::macros::render; use super::table_row::RenderTableRow; @@ -11,15 +13,29 @@ use super::table_row::RenderTableRow; #[serde(tag = "type")] #[serde(rename = "table")] pub(crate) struct RenderTable { - children: Vec, + children: Vec, post_blank: organic::types::PostBlank, } render!(RenderTable, ITable, original, render_context, { let children = { let mut ret = Vec::new(); - for obj in original.children.iter() { - ret.push(RenderTableRow::new(render_context.clone(), obj)?); + for group in original.children.iter() { + let mut rows = Vec::new(); + match group { + ITableGroup::Head(irows) => { + for obj in irows { + rows.push(RenderTableRow::new(render_context.clone(), obj)?); + } + ret.push(RenderTableGroup::Head { children: rows }); + } + ITableGroup::Body(irows) => { + for obj in irows { + rows.push(RenderTableRow::new(render_context.clone(), obj)?); + } + ret.push(RenderTableGroup::Body { children: rows }); + } + } } ret }; diff --git a/src/context/table_group.rs b/src/context/table_group.rs new file mode 100644 index 0000000..bc2960b --- /dev/null +++ b/src/context/table_group.rs @@ -0,0 +1,12 @@ +use super::table_row::RenderTableRow; +use serde::Serialize; + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +pub(crate) enum RenderTableGroup { + #[serde(rename = "head")] + Head { children: Vec }, + + #[serde(rename = "body")] + Body { children: Vec }, +} diff --git a/src/intermediate/mod.rs b/src/intermediate/mod.rs index 0cb9190..2d6e34f 100644 --- a/src/intermediate/mod.rs +++ b/src/intermediate/mod.rs @@ -127,6 +127,7 @@ 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_group::ITableGroup; pub(crate) use table_row::ITableRow; pub(crate) use target::ITarget; pub(crate) use timestamp::ITimestamp;