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;