2023-10-29 15:36:15 -04:00
|
|
|
use serde::Serialize;
|
|
|
|
|
|
|
|
use crate::error::CustomError;
|
|
|
|
use crate::intermediate::IAstNode;
|
|
|
|
|
|
|
|
use super::angle_link::RenderAngleLink;
|
|
|
|
use super::babel_call::RenderBabelCall;
|
|
|
|
use super::bold::RenderBold;
|
|
|
|
use super::center_block::RenderCenterBlock;
|
|
|
|
use super::citation::RenderCitation;
|
|
|
|
use super::citation_reference::RenderCitationReference;
|
|
|
|
use super::clock::RenderClock;
|
|
|
|
use super::code::RenderCode;
|
|
|
|
use super::comment::RenderComment;
|
|
|
|
use super::comment_block::RenderCommentBlock;
|
|
|
|
use super::diary_sexp::RenderDiarySexp;
|
|
|
|
use super::drawer::RenderDrawer;
|
|
|
|
use super::dynamic_block::RenderDynamicBlock;
|
|
|
|
use super::entity::RenderEntity;
|
|
|
|
use super::example_block::RenderExampleBlock;
|
|
|
|
use super::export_block::RenderExportBlock;
|
|
|
|
use super::export_snippet::RenderExportSnippet;
|
|
|
|
use super::fixed_width_area::RenderFixedWidthArea;
|
|
|
|
use super::footnote_definition::RenderFootnoteDefinition;
|
|
|
|
use super::footnote_reference::RenderFootnoteReference;
|
|
|
|
use super::horizontal_rule::RenderHorizontalRule;
|
|
|
|
use super::inline_babel_call::RenderInlineBabelCall;
|
|
|
|
use super::inline_source_block::RenderInlineSourceBlock;
|
|
|
|
use super::italic::RenderItalic;
|
|
|
|
use super::keyword::RenderKeyword;
|
|
|
|
use super::latex_environment::RenderLatexEnvironment;
|
|
|
|
use super::latex_fragment::RenderLatexFragment;
|
|
|
|
use super::line_break::RenderLineBreak;
|
|
|
|
use super::org_macro::RenderOrgMacro;
|
|
|
|
use super::paragraph::RenderParagraph;
|
|
|
|
use super::plain_link::RenderPlainLink;
|
|
|
|
use super::plain_list::RenderPlainList;
|
|
|
|
use super::plain_text::RenderPlainText;
|
|
|
|
use super::planning::RenderPlanning;
|
|
|
|
use super::property_drawer::RenderPropertyDrawer;
|
|
|
|
use super::quote_block::RenderQuoteBlock;
|
|
|
|
use super::radio_link::RenderRadioLink;
|
|
|
|
use super::radio_target::RenderRadioTarget;
|
|
|
|
use super::regular_link::RenderRegularLink;
|
2023-12-19 15:42:37 -05:00
|
|
|
use super::render_context::RenderContext;
|
2023-10-29 15:36:15 -04:00
|
|
|
use super::special_block::RenderSpecialBlock;
|
|
|
|
use super::src_block::RenderSrcBlock;
|
|
|
|
use super::statistics_cookie::RenderStatisticsCookie;
|
|
|
|
use super::strike_through::RenderStrikeThrough;
|
|
|
|
use super::subscript::RenderSubscript;
|
|
|
|
use super::superscript::RenderSuperscript;
|
|
|
|
use super::table::RenderTable;
|
|
|
|
use super::target::RenderTarget;
|
|
|
|
use super::timestamp::RenderTimestamp;
|
|
|
|
use super::underline::RenderUnderline;
|
|
|
|
use super::verbatim::RenderVerbatim;
|
|
|
|
use super::verse_block::RenderVerseBlock;
|
|
|
|
use super::RenderHeading;
|
|
|
|
use super::RenderSection;
|
|
|
|
|
|
|
|
#[derive(Debug, Serialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
pub(crate) enum RenderAstNode {
|
|
|
|
Heading(RenderHeading),
|
|
|
|
Section(RenderSection),
|
|
|
|
Paragraph(RenderParagraph),
|
|
|
|
PlainList(RenderPlainList),
|
|
|
|
CenterBlock(RenderCenterBlock),
|
|
|
|
QuoteBlock(RenderQuoteBlock),
|
|
|
|
SpecialBlock(RenderSpecialBlock),
|
|
|
|
DynamicBlock(RenderDynamicBlock),
|
|
|
|
FootnoteDefinition(RenderFootnoteDefinition),
|
|
|
|
Comment(RenderComment),
|
|
|
|
Drawer(RenderDrawer),
|
|
|
|
PropertyDrawer(RenderPropertyDrawer),
|
|
|
|
Table(RenderTable),
|
|
|
|
VerseBlock(RenderVerseBlock),
|
|
|
|
CommentBlock(RenderCommentBlock),
|
|
|
|
ExampleBlock(RenderExampleBlock),
|
|
|
|
ExportBlock(RenderExportBlock),
|
|
|
|
SrcBlock(RenderSrcBlock),
|
|
|
|
Clock(RenderClock),
|
|
|
|
DiarySexp(RenderDiarySexp),
|
|
|
|
Planning(RenderPlanning),
|
|
|
|
FixedWidthArea(RenderFixedWidthArea),
|
|
|
|
HorizontalRule(RenderHorizontalRule),
|
|
|
|
Keyword(RenderKeyword),
|
|
|
|
BabelCall(RenderBabelCall),
|
|
|
|
LatexEnvironment(RenderLatexEnvironment),
|
|
|
|
Bold(RenderBold),
|
|
|
|
Italic(RenderItalic),
|
|
|
|
Underline(RenderUnderline),
|
|
|
|
StrikeThrough(RenderStrikeThrough),
|
|
|
|
Code(RenderCode),
|
|
|
|
Verbatim(RenderVerbatim),
|
|
|
|
PlainText(RenderPlainText),
|
|
|
|
RegularLink(RenderRegularLink),
|
|
|
|
RadioLink(RenderRadioLink),
|
|
|
|
RadioTarget(RenderRadioTarget),
|
|
|
|
PlainLink(RenderPlainLink),
|
|
|
|
AngleLink(RenderAngleLink),
|
|
|
|
OrgMacro(RenderOrgMacro),
|
|
|
|
Entity(RenderEntity),
|
|
|
|
LatexFragment(RenderLatexFragment),
|
|
|
|
ExportSnippet(RenderExportSnippet),
|
|
|
|
FootnoteReference(RenderFootnoteReference),
|
|
|
|
Citation(RenderCitation),
|
|
|
|
CitationReference(RenderCitationReference),
|
|
|
|
InlineBabelCall(RenderInlineBabelCall),
|
|
|
|
InlineSourceBlock(RenderInlineSourceBlock),
|
|
|
|
LineBreak(RenderLineBreak),
|
|
|
|
Target(RenderTarget),
|
|
|
|
StatisticsCookie(RenderStatisticsCookie),
|
|
|
|
Subscript(RenderSubscript),
|
|
|
|
Superscript(RenderSuperscript),
|
|
|
|
Timestamp(RenderTimestamp),
|
|
|
|
}
|
|
|
|
|
|
|
|
pub(crate) trait IntoRenderAstNode {
|
|
|
|
fn into_render_ast_node(
|
|
|
|
&self,
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context: RenderContext<'_>,
|
2023-10-29 15:36:15 -04:00
|
|
|
) -> Result<RenderAstNode, CustomError>;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl IntoRenderAstNode for IAstNode {
|
|
|
|
fn into_render_ast_node(
|
|
|
|
&self,
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context: RenderContext<'_>,
|
2023-10-29 15:36:15 -04:00
|
|
|
) -> Result<RenderAstNode, CustomError> {
|
|
|
|
match self {
|
|
|
|
IAstNode::Heading(inner) => Ok(RenderAstNode::Heading(RenderHeading::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Section(inner) => Ok(RenderAstNode::Section(RenderSection::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Paragraph(inner) => Ok(RenderAstNode::Paragraph(RenderParagraph::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::PlainList(inner) => Ok(RenderAstNode::PlainList(RenderPlainList::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::CenterBlock(inner) => Ok(RenderAstNode::CenterBlock(RenderCenterBlock::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::QuoteBlock(inner) => Ok(RenderAstNode::QuoteBlock(RenderQuoteBlock::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::SpecialBlock(inner) => Ok(RenderAstNode::SpecialBlock(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderSpecialBlock::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::DynamicBlock(inner) => Ok(RenderAstNode::DynamicBlock(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderDynamicBlock::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::FootnoteDefinition(inner) => Ok(RenderAstNode::FootnoteDefinition(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderFootnoteDefinition::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::Comment(inner) => Ok(RenderAstNode::Comment(RenderComment::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Drawer(inner) => Ok(RenderAstNode::Drawer(RenderDrawer::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::PropertyDrawer(inner) => Ok(RenderAstNode::PropertyDrawer(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderPropertyDrawer::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::Table(inner) => Ok(RenderAstNode::Table(RenderTable::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::VerseBlock(inner) => Ok(RenderAstNode::VerseBlock(RenderVerseBlock::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::CommentBlock(inner) => Ok(RenderAstNode::CommentBlock(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderCommentBlock::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::ExampleBlock(inner) => Ok(RenderAstNode::ExampleBlock(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderExampleBlock::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::ExportBlock(inner) => Ok(RenderAstNode::ExportBlock(RenderExportBlock::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::SrcBlock(inner) => Ok(RenderAstNode::SrcBlock(RenderSrcBlock::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Clock(inner) => Ok(RenderAstNode::Clock(RenderClock::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::DiarySexp(inner) => Ok(RenderAstNode::DiarySexp(RenderDiarySexp::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Planning(inner) => Ok(RenderAstNode::Planning(RenderPlanning::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::FixedWidthArea(inner) => Ok(RenderAstNode::FixedWidthArea(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderFixedWidthArea::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::HorizontalRule(inner) => Ok(RenderAstNode::HorizontalRule(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderHorizontalRule::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::Keyword(inner) => Ok(RenderAstNode::Keyword(RenderKeyword::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::BabelCall(inner) => Ok(RenderAstNode::BabelCall(RenderBabelCall::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::LatexEnvironment(inner) => Ok(RenderAstNode::LatexEnvironment(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderLatexEnvironment::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
2023-12-19 15:42:37 -05:00
|
|
|
IAstNode::Bold(inner) => {
|
|
|
|
Ok(RenderAstNode::Bold(RenderBold::new(render_context, inner)?))
|
|
|
|
}
|
2023-10-29 15:36:15 -04:00
|
|
|
IAstNode::Italic(inner) => Ok(RenderAstNode::Italic(RenderItalic::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Underline(inner) => Ok(RenderAstNode::Underline(RenderUnderline::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::StrikeThrough(inner) => Ok(RenderAstNode::StrikeThrough(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderStrikeThrough::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
2023-12-19 15:42:37 -05:00
|
|
|
IAstNode::Code(inner) => {
|
|
|
|
Ok(RenderAstNode::Code(RenderCode::new(render_context, inner)?))
|
|
|
|
}
|
2023-10-29 15:36:15 -04:00
|
|
|
IAstNode::Verbatim(inner) => Ok(RenderAstNode::Verbatim(RenderVerbatim::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::PlainText(inner) => Ok(RenderAstNode::PlainText(RenderPlainText::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::RegularLink(inner) => Ok(RenderAstNode::RegularLink(RenderRegularLink::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::RadioLink(inner) => Ok(RenderAstNode::RadioLink(RenderRadioLink::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::RadioTarget(inner) => Ok(RenderAstNode::RadioTarget(RenderRadioTarget::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::PlainLink(inner) => Ok(RenderAstNode::PlainLink(RenderPlainLink::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::AngleLink(inner) => Ok(RenderAstNode::AngleLink(RenderAngleLink::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::OrgMacro(inner) => Ok(RenderAstNode::OrgMacro(RenderOrgMacro::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Entity(inner) => Ok(RenderAstNode::Entity(RenderEntity::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::LatexFragment(inner) => Ok(RenderAstNode::LatexFragment(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderLatexFragment::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::ExportSnippet(inner) => Ok(RenderAstNode::ExportSnippet(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderExportSnippet::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::FootnoteReference(inner) => Ok(RenderAstNode::FootnoteReference(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderFootnoteReference::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::Citation(inner) => Ok(RenderAstNode::Citation(RenderCitation::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::CitationReference(inner) => Ok(RenderAstNode::CitationReference(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderCitationReference::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::InlineBabelCall(inner) => Ok(RenderAstNode::InlineBabelCall(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderInlineBabelCall::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::InlineSourceBlock(inner) => Ok(RenderAstNode::InlineSourceBlock(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderInlineSourceBlock::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::LineBreak(inner) => Ok(RenderAstNode::LineBreak(RenderLineBreak::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Target(inner) => Ok(RenderAstNode::Target(RenderTarget::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::StatisticsCookie(inner) => Ok(RenderAstNode::StatisticsCookie(
|
2023-12-19 15:42:37 -05:00
|
|
|
RenderStatisticsCookie::new(render_context, inner)?,
|
2023-10-29 15:36:15 -04:00
|
|
|
)),
|
|
|
|
IAstNode::Subscript(inner) => Ok(RenderAstNode::Subscript(RenderSubscript::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Superscript(inner) => Ok(RenderAstNode::Superscript(RenderSuperscript::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IAstNode::Timestamp(inner) => Ok(RenderAstNode::Timestamp(RenderTimestamp::new(
|
2023-12-19 15:42:37 -05:00
|
|
|
render_context,
|
2023-10-29 15:36:15 -04:00
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|