diff --git a/default_environment/templates/html/line_break.dust b/default_environment/templates/html/line_break.dust
index 8749759..1915ec1 100644
--- a/default_environment/templates/html/line_break.dust
+++ b/default_environment/templates/html/line_break.dust
@@ -1 +1 @@
-line_break
+
diff --git a/default_environment/templates/html/plain_list.dust b/default_environment/templates/html/plain_list.dust
index 56e8975..fdc240e 100644
--- a/default_environment/templates/html/plain_list.dust
+++ b/default_environment/templates/html/plain_list.dust
@@ -1 +1,6 @@
-plain_list
+{@select key=.list_type}
+ {@eq value="unordered"}
{#.children}{>plain_list_item/}{/.children}
{/eq}
+ {@eq value="ordered"}{#.children}{>plain_list_item/}{/.children}
{/eq}
+ {@eq value="descriptive"}{#.children}{>plain_list_item/}{/.children}
{/eq}
+ {@none}{!TODO: make this panic!}ERROR: Unrecognized list type {.list_type}.{/none}
+{/select}
diff --git a/default_environment/templates/html/plain_list_item.dust b/default_environment/templates/html/plain_list_item.dust
new file mode 100644
index 0000000..8634420
--- /dev/null
+++ b/default_environment/templates/html/plain_list_item.dust
@@ -0,0 +1,6 @@
+{@select key=list_type}
+ {@eq value="unordered"}{#.children}{>element/}{/.children}{/eq}
+ {@eq value="ordered"}{#.children}{>element/}{/.children}{/eq}
+ {@eq value="descriptive"}{#.tag}{>object/}{/.tag}{#.children}{>element/}{/.children}{/eq}
+ {@none}{!TODO: make this panic!}ERROR: Unrecognized list type {.list_type}.{/none}
+{/select}
diff --git a/src/context/mod.rs b/src/context/mod.rs
index 7c50714..25ae64c 100644
--- a/src/context/mod.rs
+++ b/src/context/mod.rs
@@ -36,6 +36,7 @@ mod org_macro;
mod paragraph;
mod plain_link;
mod plain_list;
+mod plain_list_item;
mod plain_text;
mod planning;
mod property_drawer;
diff --git a/src/context/plain_list.rs b/src/context/plain_list.rs
index 8c239f4..b6b61b9 100644
--- a/src/context/plain_list.rs
+++ b/src/context/plain_list.rs
@@ -6,10 +6,15 @@ use crate::config::Config;
use crate::error::CustomError;
use crate::intermediate::IPlainList;
+use super::plain_list_item::RenderPlainListItem;
+
#[derive(Debug, Serialize)]
#[serde(tag = "type")]
#[serde(rename = "plain_list")]
-pub(crate) struct RenderPlainList {}
+pub(crate) struct RenderPlainList {
+ list_type: String,
+ children: Vec,
+}
impl RenderPlainList {
pub(crate) fn new(
@@ -18,6 +23,27 @@ impl RenderPlainList {
output_file: &Path,
original: &IPlainList,
) -> Result {
- Ok(RenderPlainList {})
+ let list_type = match original.list_type {
+ organic::types::PlainListType::Unordered => "unordered".to_owned(),
+ organic::types::PlainListType::Ordered => "ordered".to_owned(),
+ organic::types::PlainListType::Descriptive => "descriptive".to_owned(),
+ };
+ let children = {
+ let mut ret = Vec::new();
+ for obj in original.children.iter() {
+ ret.push(RenderPlainListItem::new(
+ config,
+ &output_directory,
+ &output_file,
+ obj,
+ )?);
+ }
+ ret
+ };
+
+ Ok(RenderPlainList {
+ list_type,
+ children,
+ })
}
}
diff --git a/src/context/plain_list_item.rs b/src/context/plain_list_item.rs
new file mode 100644
index 0000000..0cfe106
--- /dev/null
+++ b/src/context/plain_list_item.rs
@@ -0,0 +1,54 @@
+use std::path::Path;
+
+use serde::Serialize;
+
+use crate::config::Config;
+use crate::error::CustomError;
+use crate::intermediate::IPlainListItem;
+
+use super::RenderElement;
+use super::RenderObject;
+
+#[derive(Debug, Serialize)]
+#[serde(tag = "type")]
+#[serde(rename = "plain_list_item")]
+pub(crate) struct RenderPlainListItem {
+ tag: Vec,
+ children: Vec,
+}
+
+impl RenderPlainListItem {
+ pub(crate) fn new(
+ config: &Config,
+ output_directory: &Path,
+ output_file: &Path,
+ original: &IPlainListItem,
+ ) -> Result {
+ let tag = {
+ let mut ret = Vec::new();
+ for obj in original.tag.iter() {
+ ret.push(RenderObject::new(
+ config,
+ &output_directory,
+ &output_file,
+ obj,
+ )?);
+ }
+ ret
+ };
+
+ let children = {
+ let mut ret = Vec::new();
+ for obj in original.children.iter() {
+ ret.push(RenderElement::new(
+ config,
+ &output_directory,
+ &output_file,
+ obj,
+ )?);
+ }
+ ret
+ };
+ Ok(RenderPlainListItem { tag, children })
+ }
+}
diff --git a/src/intermediate/mod.rs b/src/intermediate/mod.rs
index af8cb43..ac1f411 100644
--- a/src/intermediate/mod.rs
+++ b/src/intermediate/mod.rs
@@ -37,6 +37,7 @@ mod page;
mod paragraph;
mod plain_link;
mod plain_list;
+mod plain_list_item;
mod plain_text;
mod planning;
mod property_drawer;
@@ -98,6 +99,7 @@ pub(crate) use page::BlogPostPage;
pub(crate) use paragraph::IParagraph;
pub(crate) use plain_link::IPlainLink;
pub(crate) use plain_list::IPlainList;
+pub(crate) use plain_list_item::IPlainListItem;
pub(crate) use plain_text::IPlainText;
pub(crate) use planning::IPlanning;
pub(crate) use property_drawer::IPropertyDrawer;
diff --git a/src/intermediate/plain_list.rs b/src/intermediate/plain_list.rs
index 3b1eac8..2065403 100644
--- a/src/intermediate/plain_list.rs
+++ b/src/intermediate/plain_list.rs
@@ -1,15 +1,30 @@
use crate::error::CustomError;
use super::registry::Registry;
+use super::IPlainListItem;
#[derive(Debug)]
-pub(crate) struct IPlainList {}
+pub(crate) struct IPlainList {
+ pub(crate) list_type: organic::types::PlainListType,
+ pub(crate) children: Vec,
+}
impl IPlainList {
pub(crate) async fn new<'parse>(
registry: &mut Registry<'parse>,
plain_list: &organic::types::PlainList<'parse>,
) -> Result {
- Ok(IPlainList {})
+ let children = {
+ let mut ret = Vec::new();
+ for obj in plain_list.children.iter() {
+ ret.push(IPlainListItem::new(registry, obj).await?);
+ }
+ ret
+ };
+
+ Ok(IPlainList {
+ list_type: plain_list.list_type,
+ children,
+ })
}
}
diff --git a/src/intermediate/plain_list_item.rs b/src/intermediate/plain_list_item.rs
new file mode 100644
index 0000000..8a77b9a
--- /dev/null
+++ b/src/intermediate/plain_list_item.rs
@@ -0,0 +1,36 @@
+use crate::error::CustomError;
+
+use super::registry::Registry;
+use super::IElement;
+use super::IObject;
+
+#[derive(Debug)]
+pub(crate) struct IPlainListItem {
+ pub(crate) tag: Vec,
+ pub(crate) children: Vec,
+}
+
+impl IPlainListItem {
+ pub(crate) async fn new<'parse>(
+ registry: &mut Registry<'parse>,
+ plain_list_item: &organic::types::PlainListItem<'parse>,
+ ) -> Result {
+ let tag = {
+ let mut ret = Vec::new();
+ for obj in plain_list_item.tag.iter() {
+ ret.push(IObject::new(registry, obj).await?);
+ }
+ ret
+ };
+
+ let children = {
+ let mut ret = Vec::new();
+ for elem in plain_list_item.children.iter() {
+ ret.push(IElement::new(registry, elem).await?);
+ }
+ ret
+ };
+
+ Ok(IPlainListItem { tag, children })
+ }
+}