use super::*;
#[derive(Debug)]
pub enum DirectiveNode {
Admonition {
content_indent: usize,
classes: Option<String>,
name: Option<String>,
variant: AdmonitionType,
},
Image(ImageDirective),
BodyElement(BodyElementDirective),
Table(TableDirective),
DocumentPart(DocumentPartDirective),
Reference(ReferenceDirective),
HTMLspecific(HTMLSpecificDirective),
SubstitutionDef(SubstitutionDefDirective),
Miscellaneous(MiscellaneousDirective),
APlusrSTTools(AplusDirective),
}
#[derive(Debug, Clone)]
pub enum AdmonitionType {
Attention,
Caution,
Danger,
Error,
Hint,
Important,
Note,
Tip,
Warning,
Admonition { title: String },
}
use std::fmt;
impl std::fmt::Display for AdmonitionType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let admonition_str = match self {
Self::Attention => "attention".to_string(),
Self::Caution => "caution".to_string(),
Self::Danger => "danger".to_string(),
Self::Error => "error".to_string(),
Self::Hint => "hint".to_string(),
Self::Important => "important".to_string(),
Self::Note => "note".to_string(),
Self::Tip => "tip".to_string(),
Self::Warning => "warning".to_string(),
Self::Admonition { title } => format!("admonition: {}", title),
};
write!(f, "{}", admonition_str)
}
}
#[derive(Debug)]
pub enum ImageDirective {
Image {
uri: String,
alt: Option<String>,
height: Option<String>,
width: Option<String>,
scale: Option<String>,
align: Option<String>,
target: Option<String>,
name: Option<String>,
class: Option<String>,
},
Figure {
uri: String,
name: Option<String>,
class: Option<String>,
alt: Option<String>,
height: Option<String>,
width: Option<String>,
scale: Option<String>,
align: Option<String>,
target: Option<String>,
figwidth: Option<FigWidth>,
figclass: Option<String>,
},
}
#[derive(Debug)]
pub enum FigWidth {
Image,
Length(u32),
Percentage(u32),
}
#[derive(Debug)]
pub enum BodyElementDirective {
Topic {
title: String,
name: Option<String>,
class: Option<String>,
},
SideBar {
title: Option<String>,
name: Option<String>,
class: Option<String>,
},
ParsedLiteralBlock {
inline_nodes: Vec<TreeNodeType>,
name: Option<String>,
class: Option<String>,
},
Code {
language: Option<String>,
name: Option<String>,
class: Option<String>,
number_lines: Option<u32>,
},
Math {
name: Option<String>,
class: Option<String>,
},
Rubric {
name: Option<String>,
class: Option<String>,
},
Epigraph,
Highlights,
PullQuote,
CompoundParagraph {
name: Option<String>,
class: Option<String>,
},
Container {
class_names: Option<Vec<String>>,
name: Option<String>,
},
}
pub enum TableWidth {
Length(u32),
Percentage(u32),
}
#[derive(Debug)]
pub enum TableDirective {
Table {
name: Option<String>,
class: Option<String>,
align: Option<HorizontalAlignment>,
widths: Option<Vec<usize>>,
width: Option<Length>,
},
CSVTable {
name: Option<String>,
class: Option<String>,
widths: Option<TableColWidths>,
width: Option<MetricType>,
header_rows: Option<u32>,
stub_columns: Option<u32>,
header: Option<Vec<String>>,
file: Option<String>,
url: Option<String>,
encoding: Option<String>,
delim: Option<char>,
quote: Option<char>,
keepspace: Option<bool>,
escape: Option<char>,
align: Option<HorizontalAlignment>,
},
ListTable {
widths: Option<TableColWidths>,
width: Option<MetricType>,
header_rows: Option<u32>,
stub_columns: Option<u32>,
align: Option<HorizontalAlignment>,
},
}
#[derive(Debug)]
pub enum DocumentPartDirective {}
#[derive(Debug)]
pub enum ReferenceDirective {
TargetFootnote {
class: Option<String>,
name: Option<String>,
},
Footnote,
Citation,
}
#[derive(Debug)]
pub enum HTMLSpecificDirective {
Meta,
ImageMap,
}
#[derive(Debug)]
pub enum SubstitutionDefDirective {
ReplacementText,
UnicodeCharCode,
Date,
}
#[derive(Debug)]
pub enum MiscellaneousDirective {
Include {
start_line: Option<usize>,
end_line: Option<usize>,
start_after: Option<String>,
end_before: Option<String>,
literal: Option<bool>,
code: Option<String>,
number_lines: Option<String>,
encoding: Option<String>,
tab_width: Option<usize>,
class: Option<String>,
name: Option<String>,
},
RawDataPassthrough {
file: Option<String>,
url: Option<String>,
encoding: Option<String>,
},
Class { class_names: Option<Vec<String>> },
CustomInterpretedTextRole,
DefaultRole,
MetadataDocTitle,
ReStructuredTextTestDirective,
}
#[derive(Debug)]
pub enum AplusDirective {
GradedQuestionnaire,
FeedbackQuestionnaire,
SubmittableExercise,
LTIExercise,
RoundSettings,
ActiveElementInput,
ActiveElementOutput,
HiddenBlock,
PointOfInterest,
AnnotatedCodeBlock,
CodeBlockWithLineReference,
REPLSession,
SubmittableACOSExercise,
HTMLDiv,
CSSStyledTopic,
Media,
}