2023-10-27 12:47:12 -04:00
|
|
|
use std::path::Path;
|
|
|
|
|
2023-10-24 00:04:44 -04:00
|
|
|
use serde::Serialize;
|
|
|
|
|
2023-10-27 12:47:12 -04:00
|
|
|
use crate::config::Config;
|
|
|
|
use crate::error::CustomError;
|
2023-10-27 13:05:34 -04:00
|
|
|
use crate::intermediate::IObject;
|
2023-10-27 12:47:12 -04:00
|
|
|
|
2023-10-27 17:48:19 -04:00
|
|
|
use super::angle_link::RenderAngleLink;
|
|
|
|
use super::bold::RenderBold;
|
|
|
|
use super::citation::RenderCitation;
|
|
|
|
use super::citation_reference::RenderCitationReference;
|
|
|
|
use super::code::RenderCode;
|
|
|
|
use super::entity::RenderEntity;
|
|
|
|
use super::export_snippet::RenderExportSnippet;
|
|
|
|
use super::footnote_reference::RenderFootnoteReference;
|
|
|
|
use super::inline_babel_call::RenderInlineBabelCall;
|
|
|
|
use super::inline_source_block::RenderInlineSourceBlock;
|
|
|
|
use super::italic::RenderItalic;
|
|
|
|
use super::latex_fragment::RenderLatexFragment;
|
|
|
|
use super::line_break::RenderLineBreak;
|
|
|
|
use super::org_macro::RenderOrgMacro;
|
|
|
|
use super::plain_link::RenderPlainLink;
|
2023-10-27 13:01:45 -04:00
|
|
|
use super::plain_text::RenderPlainText;
|
2023-10-27 17:48:19 -04:00
|
|
|
use super::radio_link::RenderRadioLink;
|
|
|
|
use super::radio_target::RenderRadioTarget;
|
|
|
|
use super::regular_link::RenderRegularLink;
|
|
|
|
use super::statistics_cookie::RenderStatisticsCookie;
|
|
|
|
use super::strike_through::RenderStrikeThrough;
|
|
|
|
use super::subscript::RenderSubscript;
|
|
|
|
use super::superscript::RenderSuperscript;
|
2023-10-27 14:54:54 -04:00
|
|
|
use super::target::RenderTarget;
|
2023-10-27 17:48:19 -04:00
|
|
|
use super::timestamp::RenderTimestamp;
|
|
|
|
use super::underline::RenderUnderline;
|
|
|
|
use super::verbatim::RenderVerbatim;
|
2023-10-27 13:01:45 -04:00
|
|
|
|
2023-10-24 00:04:44 -04:00
|
|
|
#[derive(Debug, Serialize)]
|
|
|
|
#[serde(untagged)]
|
2023-10-27 13:01:45 -04:00
|
|
|
pub(crate) enum RenderObject {
|
2023-10-27 17:48:19 -04:00
|
|
|
Bold(RenderBold),
|
|
|
|
Italic(RenderItalic),
|
|
|
|
Underline(RenderUnderline),
|
|
|
|
StrikeThrough(RenderStrikeThrough),
|
|
|
|
Code(RenderCode),
|
|
|
|
Verbatim(RenderVerbatim),
|
2023-10-27 13:01:45 -04:00
|
|
|
PlainText(RenderPlainText),
|
2023-10-27 17:48:19 -04:00
|
|
|
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),
|
2023-10-27 14:54:54 -04:00
|
|
|
Target(RenderTarget),
|
2023-10-27 17:48:19 -04:00
|
|
|
StatisticsCookie(RenderStatisticsCookie),
|
|
|
|
Subscript(RenderSubscript),
|
|
|
|
Superscript(RenderSuperscript),
|
|
|
|
Timestamp(RenderTimestamp),
|
2023-10-27 13:01:45 -04:00
|
|
|
}
|
2023-10-27 12:47:12 -04:00
|
|
|
|
|
|
|
impl RenderObject {
|
|
|
|
pub(crate) fn new<D: AsRef<Path>, F: AsRef<Path>>(
|
|
|
|
config: &Config,
|
|
|
|
output_directory: D,
|
|
|
|
output_file: F,
|
2023-10-27 13:05:34 -04:00
|
|
|
object: &IObject,
|
2023-10-27 12:47:12 -04:00
|
|
|
) -> Result<RenderObject, CustomError> {
|
2023-10-27 13:01:45 -04:00
|
|
|
match object {
|
2023-10-27 17:48:19 -04:00
|
|
|
IObject::Bold(inner) => Ok(RenderObject::Bold(RenderBold::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::Italic(inner) => Ok(RenderObject::Italic(RenderItalic::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::Underline(inner) => Ok(RenderObject::Underline(RenderUnderline::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::StrikeThrough(inner) => Ok(RenderObject::StrikeThrough(
|
|
|
|
RenderStrikeThrough::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::Code(inner) => Ok(RenderObject::Code(RenderCode::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::Verbatim(inner) => Ok(RenderObject::Verbatim(RenderVerbatim::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
2023-10-27 13:05:34 -04:00
|
|
|
IObject::PlainText(inner) => Ok(RenderObject::PlainText(RenderPlainText::new(
|
2023-10-27 13:01:45 -04:00
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
2023-10-27 17:48:19 -04:00
|
|
|
IObject::RegularLink(inner) => Ok(RenderObject::RegularLink(RenderRegularLink::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::RadioLink(inner) => Ok(RenderObject::RadioLink(RenderRadioLink::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::RadioTarget(inner) => Ok(RenderObject::RadioTarget(RenderRadioTarget::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::PlainLink(inner) => Ok(RenderObject::PlainLink(RenderPlainLink::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::AngleLink(inner) => Ok(RenderObject::AngleLink(RenderAngleLink::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::OrgMacro(inner) => Ok(RenderObject::OrgMacro(RenderOrgMacro::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::Entity(inner) => Ok(RenderObject::Entity(RenderEntity::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::LatexFragment(inner) => Ok(RenderObject::LatexFragment(
|
|
|
|
RenderLatexFragment::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::ExportSnippet(inner) => Ok(RenderObject::ExportSnippet(
|
|
|
|
RenderExportSnippet::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::FootnoteReference(inner) => Ok(RenderObject::FootnoteReference(
|
|
|
|
RenderFootnoteReference::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::Citation(inner) => Ok(RenderObject::Citation(RenderCitation::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::CitationReference(inner) => Ok(RenderObject::CitationReference(
|
|
|
|
RenderCitationReference::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::InlineBabelCall(inner) => Ok(RenderObject::InlineBabelCall(
|
|
|
|
RenderInlineBabelCall::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::InlineSourceBlock(inner) => Ok(RenderObject::InlineSourceBlock(
|
|
|
|
RenderInlineSourceBlock::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::LineBreak(inner) => Ok(RenderObject::LineBreak(RenderLineBreak::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
2023-10-27 14:54:54 -04:00
|
|
|
IObject::Target(inner) => Ok(RenderObject::Target(RenderTarget::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
2023-10-27 17:48:19 -04:00
|
|
|
IObject::StatisticsCookie(inner) => Ok(RenderObject::StatisticsCookie(
|
|
|
|
RenderStatisticsCookie::new(config, output_directory, output_file, inner)?,
|
|
|
|
)),
|
|
|
|
IObject::Subscript(inner) => Ok(RenderObject::Subscript(RenderSubscript::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::Superscript(inner) => Ok(RenderObject::Superscript(RenderSuperscript::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
|
|
|
IObject::Timestamp(inner) => Ok(RenderObject::Timestamp(RenderTimestamp::new(
|
|
|
|
config,
|
|
|
|
output_directory,
|
|
|
|
output_file,
|
|
|
|
inner,
|
|
|
|
)?)),
|
2023-10-27 13:01:45 -04:00
|
|
|
}
|
2023-10-27 12:47:12 -04:00
|
|
|
}
|
|
|
|
}
|