Render the footnote definitions.

This commit is contained in:
Tom Alexander 2023-10-29 15:50:09 -04:00
parent b66ec507ef
commit 3720558d93
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
6 changed files with 86 additions and 1 deletions

View File

@ -0,0 +1,57 @@
{@select key=.type}
{@eq value="heading"}{>heading/}{/eq}
{@eq value="section"}{>section/}{/eq}
{@eq value="paragraph"}{>paragraph/}{/eq}
{@eq value="plain_list"}{>plain_list/}{/eq}
{@eq value="center_block"}{>center_block/}{/eq}
{@eq value="quote_block"}{>quote_block/}{/eq}
{@eq value="special_block"}{>special_block/}{/eq}
{@eq value="dynamic_block"}{>dynamic_block/}{/eq}
{@eq value="footnote_definition"}{>footnote_definition/}{/eq}
{@eq value="comment"}{>comment/}{/eq}
{@eq value="drawer"}{>drawer/}{/eq}
{@eq value="property_drawer"}{>property_drawer/}{/eq}
{@eq value="table"}{>table/}{/eq}
{@eq value="verse_block"}{>verse_block/}{/eq}
{@eq value="comment_block"}{>comment_block/}{/eq}
{@eq value="example_block"}{>example_block/}{/eq}
{@eq value="export_block"}{>export_block/}{/eq}
{@eq value="src_block"}{>src_block/}{/eq}
{@eq value="clock"}{>clock/}{/eq}
{@eq value="diary_sexp"}{>diary_sexp/}{/eq}
{@eq value="planning"}{>planning/}{/eq}
{@eq value="fixed_width_area"}{>fixed_width_area/}{/eq}
{@eq value="horizontal_rule"}{>horizontal_rule/}{/eq}
{@eq value="keyword"}{>keyword/}{/eq}
{@eq value="babel_call"}{>babel_call/}{/eq}
{@eq value="latex_environment"}{>latex_environment/}{/eq}
{@eq value="bold"}{>bold/}{/eq}
{@eq value="italic"}{>italic/}{/eq}
{@eq value="underline"}{>underline/}{/eq}
{@eq value="strike_through"}{>strike_through/}{/eq}
{@eq value="code"}{>code/}{/eq}
{@eq value="verbatim"}{>verbatim/}{/eq}
{@eq value="plain_text"}{>plain_text/}{/eq}
{@eq value="regular_link"}{>regular_link/}{/eq}
{@eq value="radio_link"}{>radio_link/}{/eq}
{@eq value="radio_target"}{>radio_target/}{/eq}
{@eq value="plain_link"}{>plain_link/}{/eq}
{@eq value="angle_link"}{>angle_link/}{/eq}
{@eq value="org_macro"}{>org_macro/}{/eq}
{@eq value="entity"}{>entity/}{/eq}
{@eq value="latex_fragment"}{>latex_fragment/}{/eq}
{@eq value="export_snippet"}{>export_snippet/}{/eq}
{@eq value="footnote_reference"}{>footnote_reference/}{/eq}
{@eq value="citation"}{>citation/}{/eq}
{@eq value="citation_reference"}{>citation_reference/}{/eq}
{@eq value="inline_babel_call"}{>inline_babel_call/}{/eq}
{@eq value="inline_source_block"}{>inline_source_block/}{/eq}
{@eq value="line_break"}{>line_break/}{/eq}
{@eq value="target"}{>target/}{/eq}
{@eq value="statistics_cookie"}{>statistics_cookie/}{/eq}
{@eq value="subscript"}{>subscript/}{/eq}
{@eq value="superscript"}{>superscript/}{/eq}
{@eq value="timestamp"}{>timestamp/}{/eq}
{@none}{!TODO: make this panic!}ERROR: Unrecognized type {.type}.{/none}
{/select}
{! TODO: Maybe the final space should be conditional on end blank in the org source !}

View File

@ -12,7 +12,10 @@
{/.children} {/.children}
{?.footnotes} {?.footnotes}
{>real_footnote_definition/} <h2>Footnotes:</h2>
{#.footnotes}
{>real_footnote_definition/}
{/.footnotes}
{/.footnotes} {/.footnotes}
</div> </div>
</div> </div>

View File

@ -1,5 +1,6 @@
use serde::Serialize; use serde::Serialize;
use super::footnote_definition::RenderRealFootnoteDefinition;
use super::GlobalSettings; use super::GlobalSettings;
use super::RenderDocumentElement; use super::RenderDocumentElement;
@ -15,6 +16,8 @@ pub(crate) struct RenderBlogPostPage {
self_link: Option<String>, self_link: Option<String>,
children: Vec<RenderDocumentElement>, children: Vec<RenderDocumentElement>,
footnotes: Vec<RenderRealFootnoteDefinition>,
} }
impl RenderBlogPostPage { impl RenderBlogPostPage {
@ -23,12 +26,14 @@ impl RenderBlogPostPage {
title: Option<String>, title: Option<String>,
self_link: Option<String>, self_link: Option<String>,
children: Vec<RenderDocumentElement>, children: Vec<RenderDocumentElement>,
footnotes: Vec<RenderRealFootnoteDefinition>,
) -> RenderBlogPostPage { ) -> RenderBlogPostPage {
RenderBlogPostPage { RenderBlogPostPage {
global_settings, global_settings,
title, title,
self_link, self_link,
children, children,
footnotes,
} }
} }
} }

View File

@ -32,6 +32,7 @@ impl RenderFootnoteDefinition {
pub(crate) struct RenderRealFootnoteDefinition { pub(crate) struct RenderRealFootnoteDefinition {
definition_id: String, definition_id: String,
reference_link: String, reference_link: String,
label: String,
contents: Vec<RenderAstNode>, contents: Vec<RenderAstNode>,
} }
@ -53,6 +54,7 @@ impl RenderRealFootnoteDefinition {
Ok(RenderRealFootnoteDefinition { Ok(RenderRealFootnoteDefinition {
definition_id: original.get_definition_id(), definition_id: original.get_definition_id(),
reference_link: format!("#{}", original.get_reference_id()), reference_link: format!("#{}", original.get_reference_id()),
label: original.get_display_label(),
contents, contents,
}) })
} }

View File

@ -62,6 +62,7 @@ mod verse_block;
pub(crate) use blog_post_page::RenderBlogPostPage; pub(crate) use blog_post_page::RenderBlogPostPage;
pub(crate) use document_element::RenderDocumentElement; pub(crate) use document_element::RenderDocumentElement;
pub(crate) use element::RenderElement; pub(crate) use element::RenderElement;
pub(crate) use footnote_definition::RenderRealFootnoteDefinition;
pub(crate) use global_settings::GlobalSettings; pub(crate) use global_settings::GlobalSettings;
pub(crate) use heading::RenderHeading; pub(crate) use heading::RenderHeading;
pub(crate) use object::RenderObject; pub(crate) use object::RenderObject;

View File

@ -6,6 +6,7 @@ use crate::config::Config;
use crate::context::GlobalSettings; use crate::context::GlobalSettings;
use crate::context::RenderBlogPostPage; use crate::context::RenderBlogPostPage;
use crate::context::RenderDocumentElement; use crate::context::RenderDocumentElement;
use crate::context::RenderRealFootnoteDefinition;
use crate::error::CustomError; use crate::error::CustomError;
use super::BlogPost; use super::BlogPost;
@ -55,11 +56,27 @@ pub(crate) fn convert_blog_post_page_to_render_context<D: AsRef<Path>, F: AsRef<
children children
}; };
let footnotes = {
let mut ret = Vec::new();
for footnote in page.footnotes.iter() {
ret.push(RenderRealFootnoteDefinition::new(
config,
output_directory,
output_file,
footnote,
)?);
}
ret
};
let ret = RenderBlogPostPage::new( let ret = RenderBlogPostPage::new(
global_settings, global_settings,
page.title.clone(), page.title.clone(),
Some(link_to_blog_post), Some(link_to_blog_post),
children, children,
footnotes,
); );
Ok(ret) Ok(ret)
} }