Compare commits
No commits in common. "590e7fba0eff207dbc2f5f89c1c1bc1b47cedd89" and "0654b676f7442001e390b18ac7e0d703c6d7dd2e" have entirely different histories.
590e7fba0e
...
0654b676f7
@ -1,3 +0,0 @@
|
|||||||
#+begin_defun foo bar baz
|
|
||||||
lorem
|
|
||||||
#+end_defun
|
|
@ -17,7 +17,6 @@ use crate::types::AngleLink;
|
|||||||
use crate::types::AstNode;
|
use crate::types::AstNode;
|
||||||
use crate::types::BabelCall;
|
use crate::types::BabelCall;
|
||||||
use crate::types::Bold;
|
use crate::types::Bold;
|
||||||
use crate::types::CenterBlock;
|
|
||||||
use crate::types::CheckboxType;
|
use crate::types::CheckboxType;
|
||||||
use crate::types::Citation;
|
use crate::types::Citation;
|
||||||
use crate::types::CitationReference;
|
use crate::types::CitationReference;
|
||||||
@ -41,6 +40,7 @@ use crate::types::FixedWidthArea;
|
|||||||
use crate::types::FootnoteDefinition;
|
use crate::types::FootnoteDefinition;
|
||||||
use crate::types::FootnoteReference;
|
use crate::types::FootnoteReference;
|
||||||
use crate::types::GetStandardProperties;
|
use crate::types::GetStandardProperties;
|
||||||
|
use crate::types::GreaterBlock;
|
||||||
use crate::types::Heading;
|
use crate::types::Heading;
|
||||||
use crate::types::HorizontalRule;
|
use crate::types::HorizontalRule;
|
||||||
use crate::types::Hour;
|
use crate::types::Hour;
|
||||||
@ -69,14 +69,12 @@ use crate::types::PlainText;
|
|||||||
use crate::types::Planning;
|
use crate::types::Planning;
|
||||||
use crate::types::PriorityCookie;
|
use crate::types::PriorityCookie;
|
||||||
use crate::types::PropertyDrawer;
|
use crate::types::PropertyDrawer;
|
||||||
use crate::types::QuoteBlock;
|
|
||||||
use crate::types::RadioLink;
|
use crate::types::RadioLink;
|
||||||
use crate::types::RadioTarget;
|
use crate::types::RadioTarget;
|
||||||
use crate::types::RegularLink;
|
use crate::types::RegularLink;
|
||||||
use crate::types::RepeaterType;
|
use crate::types::RepeaterType;
|
||||||
use crate::types::RepeaterWarningDelayValueType;
|
use crate::types::RepeaterWarningDelayValueType;
|
||||||
use crate::types::Section;
|
use crate::types::Section;
|
||||||
use crate::types::SpecialBlock;
|
|
||||||
use crate::types::SrcBlock;
|
use crate::types::SrcBlock;
|
||||||
use crate::types::StandardProperties;
|
use crate::types::StandardProperties;
|
||||||
use crate::types::StatisticsCookie;
|
use crate::types::StatisticsCookie;
|
||||||
@ -331,9 +329,7 @@ fn compare_ast_node<'b, 's>(
|
|||||||
AstNode::Paragraph(node) => compare_paragraph(source, emacs, node),
|
AstNode::Paragraph(node) => compare_paragraph(source, emacs, node),
|
||||||
AstNode::PlainList(node) => compare_plain_list(source, emacs, node),
|
AstNode::PlainList(node) => compare_plain_list(source, emacs, node),
|
||||||
AstNode::PlainListItem(node) => compare_plain_list_item(source, emacs, node),
|
AstNode::PlainListItem(node) => compare_plain_list_item(source, emacs, node),
|
||||||
AstNode::CenterBlock(node) => compare_center_block(source, emacs, node),
|
AstNode::GreaterBlock(node) => compare_greater_block(source, emacs, node),
|
||||||
AstNode::QuoteBlock(node) => compare_quote_block(source, emacs, node),
|
|
||||||
AstNode::SpecialBlock(node) => compare_special_block(source, emacs, node),
|
|
||||||
AstNode::DynamicBlock(node) => compare_dynamic_block(source, emacs, node),
|
AstNode::DynamicBlock(node) => compare_dynamic_block(source, emacs, node),
|
||||||
AstNode::FootnoteDefinition(node) => compare_footnote_definition(source, emacs, node),
|
AstNode::FootnoteDefinition(node) => compare_footnote_definition(source, emacs, node),
|
||||||
AstNode::Comment(node) => compare_comment(source, emacs, node),
|
AstNode::Comment(node) => compare_comment(source, emacs, node),
|
||||||
@ -1015,90 +1011,17 @@ fn compare_plain_list_item<'b, 's>(
|
|||||||
.into())
|
.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compare_center_block<'b, 's>(
|
fn compare_greater_block<'b, 's>(
|
||||||
source: &'s str,
|
source: &'s str,
|
||||||
emacs: &'b Token<'s>,
|
emacs: &'b Token<'s>,
|
||||||
rust: &'b CenterBlock<'s>,
|
rust: &'b GreaterBlock<'s>,
|
||||||
) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> {
|
) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> {
|
||||||
let children = emacs.as_list()?;
|
let children = emacs.as_list()?;
|
||||||
let mut child_status = Vec::new();
|
let mut child_status = Vec::new();
|
||||||
let this_status = DiffStatus::Good;
|
let this_status = DiffStatus::Good;
|
||||||
let message = None;
|
let message = None;
|
||||||
|
// TODO: Special block compare :type :parameters
|
||||||
for (emacs_child, rust_child) in children.iter().skip(2).zip(rust.children.iter()) {
|
// Center and quote block has no additional properties
|
||||||
child_status.push(compare_ast_node(source, emacs_child, rust_child.into())?);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(DiffResult {
|
|
||||||
status: this_status,
|
|
||||||
name: rust.get_elisp_name(),
|
|
||||||
message,
|
|
||||||
children: child_status,
|
|
||||||
rust_source: rust.get_source(),
|
|
||||||
emacs_token: emacs,
|
|
||||||
}
|
|
||||||
.into())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn compare_quote_block<'b, 's>(
|
|
||||||
source: &'s str,
|
|
||||||
emacs: &'b Token<'s>,
|
|
||||||
rust: &'b QuoteBlock<'s>,
|
|
||||||
) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> {
|
|
||||||
let children = emacs.as_list()?;
|
|
||||||
let mut child_status = Vec::new();
|
|
||||||
let this_status = DiffStatus::Good;
|
|
||||||
let message = None;
|
|
||||||
|
|
||||||
for (emacs_child, rust_child) in children.iter().skip(2).zip(rust.children.iter()) {
|
|
||||||
child_status.push(compare_ast_node(source, emacs_child, rust_child.into())?);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(DiffResult {
|
|
||||||
status: this_status,
|
|
||||||
name: rust.get_elisp_name(),
|
|
||||||
message,
|
|
||||||
children: child_status,
|
|
||||||
rust_source: rust.get_source(),
|
|
||||||
emacs_token: emacs,
|
|
||||||
}
|
|
||||||
.into())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn compare_special_block<'b, 's>(
|
|
||||||
source: &'s str,
|
|
||||||
emacs: &'b Token<'s>,
|
|
||||||
rust: &'b SpecialBlock<'s>,
|
|
||||||
) -> Result<DiffEntry<'b, 's>, Box<dyn std::error::Error>> {
|
|
||||||
let children = emacs.as_list()?;
|
|
||||||
let mut child_status = Vec::new();
|
|
||||||
let mut this_status = DiffStatus::Good;
|
|
||||||
let mut message = None;
|
|
||||||
|
|
||||||
// Compare type
|
|
||||||
let special_block_type =
|
|
||||||
get_property_quoted_string(emacs, ":type")?.ok_or("Special blocks should have a name.")?;
|
|
||||||
if special_block_type != rust.name {
|
|
||||||
this_status = DiffStatus::Bad;
|
|
||||||
message = Some(format!(
|
|
||||||
"Name mismatch (emacs != rust) {:?} != {:?}",
|
|
||||||
special_block_type, rust.name
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compare parameters
|
|
||||||
let parameters = get_property_quoted_string(emacs, ":parameters")?;
|
|
||||||
match (parameters.as_ref(), rust.parameters) {
|
|
||||||
(None, None) => {}
|
|
||||||
(Some(emacs_parameters), Some(rust_parameters)) if emacs_parameters == rust_parameters => {}
|
|
||||||
_ => {
|
|
||||||
this_status = DiffStatus::Bad;
|
|
||||||
message = Some(format!(
|
|
||||||
"Parameters mismatch (emacs != rust) {:?} != {:?}",
|
|
||||||
parameters, rust.parameters
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (emacs_child, rust_child) in children.iter().skip(2).zip(rust.children.iter()) {
|
for (emacs_child, rust_child) in children.iter().skip(2).zip(rust.children.iter()) {
|
||||||
child_status.push(compare_ast_node(source, emacs_child, rust_child.into())?);
|
child_status.push(compare_ast_node(source, emacs_child, rust_child.into())?);
|
||||||
|
@ -4,7 +4,6 @@ use crate::types::AngleLink;
|
|||||||
use crate::types::AstNode;
|
use crate::types::AstNode;
|
||||||
use crate::types::BabelCall;
|
use crate::types::BabelCall;
|
||||||
use crate::types::Bold;
|
use crate::types::Bold;
|
||||||
use crate::types::CenterBlock;
|
|
||||||
use crate::types::Citation;
|
use crate::types::Citation;
|
||||||
use crate::types::CitationReference;
|
use crate::types::CitationReference;
|
||||||
use crate::types::Clock;
|
use crate::types::Clock;
|
||||||
@ -23,6 +22,7 @@ use crate::types::ExportSnippet;
|
|||||||
use crate::types::FixedWidthArea;
|
use crate::types::FixedWidthArea;
|
||||||
use crate::types::FootnoteDefinition;
|
use crate::types::FootnoteDefinition;
|
||||||
use crate::types::FootnoteReference;
|
use crate::types::FootnoteReference;
|
||||||
|
use crate::types::GreaterBlock;
|
||||||
use crate::types::Heading;
|
use crate::types::Heading;
|
||||||
use crate::types::HorizontalRule;
|
use crate::types::HorizontalRule;
|
||||||
use crate::types::InlineBabelCall;
|
use crate::types::InlineBabelCall;
|
||||||
@ -42,12 +42,10 @@ use crate::types::PlainListItem;
|
|||||||
use crate::types::PlainText;
|
use crate::types::PlainText;
|
||||||
use crate::types::Planning;
|
use crate::types::Planning;
|
||||||
use crate::types::PropertyDrawer;
|
use crate::types::PropertyDrawer;
|
||||||
use crate::types::QuoteBlock;
|
|
||||||
use crate::types::RadioLink;
|
use crate::types::RadioLink;
|
||||||
use crate::types::RadioTarget;
|
use crate::types::RadioTarget;
|
||||||
use crate::types::RegularLink;
|
use crate::types::RegularLink;
|
||||||
use crate::types::Section;
|
use crate::types::Section;
|
||||||
use crate::types::SpecialBlock;
|
|
||||||
use crate::types::SrcBlock;
|
use crate::types::SrcBlock;
|
||||||
use crate::types::StatisticsCookie;
|
use crate::types::StatisticsCookie;
|
||||||
use crate::types::StrikeThrough;
|
use crate::types::StrikeThrough;
|
||||||
@ -85,9 +83,7 @@ impl<'r, 's> GetElispFact<'s> for AstNode<'r, 's> {
|
|||||||
AstNode::Paragraph(inner) => *inner,
|
AstNode::Paragraph(inner) => *inner,
|
||||||
AstNode::PlainList(inner) => *inner,
|
AstNode::PlainList(inner) => *inner,
|
||||||
AstNode::PlainListItem(inner) => *inner,
|
AstNode::PlainListItem(inner) => *inner,
|
||||||
AstNode::CenterBlock(inner) => *inner,
|
AstNode::GreaterBlock(inner) => *inner,
|
||||||
AstNode::QuoteBlock(inner) => *inner,
|
|
||||||
AstNode::SpecialBlock(inner) => *inner,
|
|
||||||
AstNode::DynamicBlock(inner) => *inner,
|
AstNode::DynamicBlock(inner) => *inner,
|
||||||
AstNode::FootnoteDefinition(inner) => *inner,
|
AstNode::FootnoteDefinition(inner) => *inner,
|
||||||
AstNode::Comment(inner) => *inner,
|
AstNode::Comment(inner) => *inner,
|
||||||
@ -146,9 +142,7 @@ impl<'s> GetElispFact<'s> for Element<'s> {
|
|||||||
match self {
|
match self {
|
||||||
Element::Paragraph(inner) => inner,
|
Element::Paragraph(inner) => inner,
|
||||||
Element::PlainList(inner) => inner,
|
Element::PlainList(inner) => inner,
|
||||||
Element::CenterBlock(inner) => inner,
|
Element::GreaterBlock(inner) => inner,
|
||||||
Element::QuoteBlock(inner) => inner,
|
|
||||||
Element::SpecialBlock(inner) => inner,
|
|
||||||
Element::DynamicBlock(inner) => inner,
|
Element::DynamicBlock(inner) => inner,
|
||||||
Element::FootnoteDefinition(inner) => inner,
|
Element::FootnoteDefinition(inner) => inner,
|
||||||
Element::Comment(inner) => inner,
|
Element::Comment(inner) => inner,
|
||||||
@ -236,21 +230,13 @@ impl<'s> ElispFact<'s> for PlainListItem<'s> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'s> ElispFact<'s> for CenterBlock<'s> {
|
impl<'s> ElispFact<'s> for GreaterBlock<'s> {
|
||||||
fn get_elisp_name<'b>(&'b self) -> Cow<'s, str> {
|
fn get_elisp_name<'b>(&'b self) -> Cow<'s, str> {
|
||||||
"center-block".into()
|
match self.name.to_lowercase().as_str() {
|
||||||
}
|
"center" => "center-block".into(),
|
||||||
}
|
"quote" => "quote-block".into(),
|
||||||
|
_ => "special-block".into(),
|
||||||
impl<'s> ElispFact<'s> for QuoteBlock<'s> {
|
}
|
||||||
fn get_elisp_name<'b>(&'b self) -> Cow<'s, str> {
|
|
||||||
"quote-block".into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'s> ElispFact<'s> for SpecialBlock<'s> {
|
|
||||||
fn get_elisp_name<'b>(&'b self) -> Cow<'s, str> {
|
|
||||||
"special-block".into()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,9 +24,7 @@ impl<'r, 's> Iterator for AllAstNodeIter<'r, 's> {
|
|||||||
AstNodeIter::Paragraph(ref mut i) => i.next(),
|
AstNodeIter::Paragraph(ref mut i) => i.next(),
|
||||||
AstNodeIter::PlainList(ref mut i) => i.next(),
|
AstNodeIter::PlainList(ref mut i) => i.next(),
|
||||||
AstNodeIter::PlainListItem(ref mut i) => i.next(),
|
AstNodeIter::PlainListItem(ref mut i) => i.next(),
|
||||||
AstNodeIter::CenterBlock(ref mut i) => i.next(),
|
AstNodeIter::GreaterBlock(ref mut i) => i.next(),
|
||||||
AstNodeIter::QuoteBlock(ref mut i) => i.next(),
|
|
||||||
AstNodeIter::SpecialBlock(ref mut i) => i.next(),
|
|
||||||
AstNodeIter::DynamicBlock(ref mut i) => i.next(),
|
AstNodeIter::DynamicBlock(ref mut i) => i.next(),
|
||||||
AstNodeIter::FootnoteDefinition(ref mut i) => i.next(),
|
AstNodeIter::FootnoteDefinition(ref mut i) => i.next(),
|
||||||
AstNodeIter::Comment(ref mut i) => i.next(),
|
AstNodeIter::Comment(ref mut i) => i.next(),
|
||||||
|
@ -7,7 +7,6 @@ use crate::types::AngleLink;
|
|||||||
use crate::types::AstNode;
|
use crate::types::AstNode;
|
||||||
use crate::types::BabelCall;
|
use crate::types::BabelCall;
|
||||||
use crate::types::Bold;
|
use crate::types::Bold;
|
||||||
use crate::types::CenterBlock;
|
|
||||||
use crate::types::Citation;
|
use crate::types::Citation;
|
||||||
use crate::types::CitationReference;
|
use crate::types::CitationReference;
|
||||||
use crate::types::Clock;
|
use crate::types::Clock;
|
||||||
@ -27,6 +26,7 @@ use crate::types::ExportSnippet;
|
|||||||
use crate::types::FixedWidthArea;
|
use crate::types::FixedWidthArea;
|
||||||
use crate::types::FootnoteDefinition;
|
use crate::types::FootnoteDefinition;
|
||||||
use crate::types::FootnoteReference;
|
use crate::types::FootnoteReference;
|
||||||
|
use crate::types::GreaterBlock;
|
||||||
use crate::types::Heading;
|
use crate::types::Heading;
|
||||||
use crate::types::HorizontalRule;
|
use crate::types::HorizontalRule;
|
||||||
use crate::types::InlineBabelCall;
|
use crate::types::InlineBabelCall;
|
||||||
@ -46,12 +46,10 @@ use crate::types::PlainListItem;
|
|||||||
use crate::types::PlainText;
|
use crate::types::PlainText;
|
||||||
use crate::types::Planning;
|
use crate::types::Planning;
|
||||||
use crate::types::PropertyDrawer;
|
use crate::types::PropertyDrawer;
|
||||||
use crate::types::QuoteBlock;
|
|
||||||
use crate::types::RadioLink;
|
use crate::types::RadioLink;
|
||||||
use crate::types::RadioTarget;
|
use crate::types::RadioTarget;
|
||||||
use crate::types::RegularLink;
|
use crate::types::RegularLink;
|
||||||
use crate::types::Section;
|
use crate::types::Section;
|
||||||
use crate::types::SpecialBlock;
|
|
||||||
use crate::types::SrcBlock;
|
use crate::types::SrcBlock;
|
||||||
use crate::types::StatisticsCookie;
|
use crate::types::StatisticsCookie;
|
||||||
use crate::types::StrikeThrough;
|
use crate::types::StrikeThrough;
|
||||||
@ -80,9 +78,7 @@ pub(crate) enum AstNodeIter<'r, 's> {
|
|||||||
Paragraph(ParagraphIter<'r, 's>),
|
Paragraph(ParagraphIter<'r, 's>),
|
||||||
PlainList(PlainListIter<'r, 's>),
|
PlainList(PlainListIter<'r, 's>),
|
||||||
PlainListItem(PlainListItemIter<'r, 's>),
|
PlainListItem(PlainListItemIter<'r, 's>),
|
||||||
CenterBlock(CenterBlockIter<'r, 's>),
|
GreaterBlock(GreaterBlockIter<'r, 's>),
|
||||||
QuoteBlock(QuoteBlockIter<'r, 's>),
|
|
||||||
SpecialBlock(SpecialBlockIter<'r, 's>),
|
|
||||||
DynamicBlock(DynamicBlockIter<'r, 's>),
|
DynamicBlock(DynamicBlockIter<'r, 's>),
|
||||||
FootnoteDefinition(FootnoteDefinitionIter<'r, 's>),
|
FootnoteDefinition(FootnoteDefinitionIter<'r, 's>),
|
||||||
Comment(CommentIter<'r, 's>),
|
Comment(CommentIter<'r, 's>),
|
||||||
@ -144,9 +140,7 @@ impl<'r, 's> AstNodeIter<'r, 's> {
|
|||||||
AstNode::Paragraph(inner) => AstNodeIter::Paragraph(inner.into_iter()),
|
AstNode::Paragraph(inner) => AstNodeIter::Paragraph(inner.into_iter()),
|
||||||
AstNode::PlainList(inner) => AstNodeIter::PlainList(inner.into_iter()),
|
AstNode::PlainList(inner) => AstNodeIter::PlainList(inner.into_iter()),
|
||||||
AstNode::PlainListItem(inner) => AstNodeIter::PlainListItem(inner.into_iter()),
|
AstNode::PlainListItem(inner) => AstNodeIter::PlainListItem(inner.into_iter()),
|
||||||
AstNode::CenterBlock(inner) => AstNodeIter::CenterBlock(inner.into_iter()),
|
AstNode::GreaterBlock(inner) => AstNodeIter::GreaterBlock(inner.into_iter()),
|
||||||
AstNode::QuoteBlock(inner) => AstNodeIter::QuoteBlock(inner.into_iter()),
|
|
||||||
AstNode::SpecialBlock(inner) => AstNodeIter::SpecialBlock(inner.into_iter()),
|
|
||||||
AstNode::DynamicBlock(inner) => AstNodeIter::DynamicBlock(inner.into_iter()),
|
AstNode::DynamicBlock(inner) => AstNodeIter::DynamicBlock(inner.into_iter()),
|
||||||
AstNode::FootnoteDefinition(inner) => {
|
AstNode::FootnoteDefinition(inner) => {
|
||||||
AstNodeIter::FootnoteDefinition(inner.into_iter())
|
AstNodeIter::FootnoteDefinition(inner.into_iter())
|
||||||
@ -238,18 +232,8 @@ multi_field_iter!(
|
|||||||
std::slice::Iter<'r, Element<'s>>
|
std::slice::Iter<'r, Element<'s>>
|
||||||
);
|
);
|
||||||
children_iter!(
|
children_iter!(
|
||||||
CenterBlock<'s>,
|
GreaterBlock<'s>,
|
||||||
CenterBlockIter,
|
GreaterBlockIter,
|
||||||
std::slice::Iter<'r, Element<'s>>
|
|
||||||
);
|
|
||||||
children_iter!(
|
|
||||||
QuoteBlock<'s>,
|
|
||||||
QuoteBlockIter,
|
|
||||||
std::slice::Iter<'r, Element<'s>>
|
|
||||||
);
|
|
||||||
children_iter!(
|
|
||||||
SpecialBlock<'s>,
|
|
||||||
SpecialBlockIter,
|
|
||||||
std::slice::Iter<'r, Element<'s>>
|
std::slice::Iter<'r, Element<'s>>
|
||||||
);
|
);
|
||||||
children_iter!(
|
children_iter!(
|
||||||
|
@ -81,7 +81,7 @@ fn _element<'b, 'g, 'r, 's>(
|
|||||||
let (remaining, mut affiliated_keywords) = many0(affiliated_keyword_matcher)(input)?;
|
let (remaining, mut affiliated_keywords) = many0(affiliated_keyword_matcher)(input)?;
|
||||||
let (remaining, mut element) = match alt((
|
let (remaining, mut element) = match alt((
|
||||||
map(plain_list_matcher, Element::PlainList),
|
map(plain_list_matcher, Element::PlainList),
|
||||||
greater_block_matcher,
|
map(greater_block_matcher, Element::GreaterBlock),
|
||||||
map(dynamic_block_matcher, Element::DynamicBlock),
|
map(dynamic_block_matcher, Element::DynamicBlock),
|
||||||
map(footnote_definition_matcher, Element::FootnoteDefinition),
|
map(footnote_definition_matcher, Element::FootnoteDefinition),
|
||||||
map(comment_matcher, Element::Comment),
|
map(comment_matcher, Element::Comment),
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use nom::branch::alt;
|
use nom::branch::alt;
|
||||||
use nom::bytes::complete::is_not;
|
use nom::bytes::complete::is_not;
|
||||||
use nom::bytes::complete::tag_no_case;
|
use nom::bytes::complete::tag_no_case;
|
||||||
use nom::character::complete::anychar;
|
|
||||||
use nom::character::complete::line_ending;
|
use nom::character::complete::line_ending;
|
||||||
use nom::character::complete::space0;
|
use nom::character::complete::space0;
|
||||||
use nom::character::complete::space1;
|
use nom::character::complete::space1;
|
||||||
@ -9,8 +8,6 @@ use nom::combinator::consumed;
|
|||||||
use nom::combinator::eof;
|
use nom::combinator::eof;
|
||||||
use nom::combinator::not;
|
use nom::combinator::not;
|
||||||
use nom::combinator::opt;
|
use nom::combinator::opt;
|
||||||
use nom::combinator::peek;
|
|
||||||
use nom::combinator::recognize;
|
|
||||||
use nom::combinator::verify;
|
use nom::combinator::verify;
|
||||||
use nom::multi::many0;
|
use nom::multi::many0;
|
||||||
use nom::multi::many_till;
|
use nom::multi::many_till;
|
||||||
@ -33,18 +30,17 @@ use crate::parser::util::blank_line;
|
|||||||
use crate::parser::util::exit_matcher_parser;
|
use crate::parser::util::exit_matcher_parser;
|
||||||
use crate::parser::util::get_consumed;
|
use crate::parser::util::get_consumed;
|
||||||
use crate::parser::util::start_of_line;
|
use crate::parser::util::start_of_line;
|
||||||
use crate::types::CenterBlock;
|
|
||||||
use crate::types::Element;
|
use crate::types::Element;
|
||||||
|
use crate::types::GreaterBlock;
|
||||||
use crate::types::Paragraph;
|
use crate::types::Paragraph;
|
||||||
use crate::types::QuoteBlock;
|
|
||||||
use crate::types::SetSource;
|
use crate::types::SetSource;
|
||||||
use crate::types::SpecialBlock;
|
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
||||||
pub(crate) fn greater_block<'b, 'g, 'r, 's>(
|
pub(crate) fn greater_block<'b, 'g, 'r, 's>(
|
||||||
context: RefContext<'b, 'g, 'r, 's>,
|
context: RefContext<'b, 'g, 'r, 's>,
|
||||||
input: OrgSource<'s>,
|
input: OrgSource<'s>,
|
||||||
) -> Res<OrgSource<'s>, Element<'s>> {
|
) -> Res<OrgSource<'s>, GreaterBlock<'s>> {
|
||||||
|
// TODO: Do I need to differentiate between different greater block types.
|
||||||
start_of_line(input)?;
|
start_of_line(input)?;
|
||||||
let (remaining, _leading_whitespace) = space0(input)?;
|
let (remaining, _leading_whitespace) = space0(input)?;
|
||||||
let (remaining, (_begin, name)) = tuple((
|
let (remaining, (_begin, name)) = tuple((
|
||||||
@ -56,98 +52,22 @@ pub(crate) fn greater_block<'b, 'g, 'r, 's>(
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
))(remaining)?;
|
))(remaining)?;
|
||||||
let name = Into::<&str>::into(name);
|
let context_name = match Into::<&str>::into(name).to_lowercase().as_str() {
|
||||||
let (remaining, element) = match name.to_lowercase().as_str() {
|
"center" => "center block".to_owned(),
|
||||||
"center" => center_block(context, remaining, input)?,
|
"quote" => "quote block".to_owned(),
|
||||||
"quote" => quote_block(context, remaining, input)?,
|
name @ _ => format!("special block {}", name),
|
||||||
_ => special_block(name)(context, remaining, input)?,
|
|
||||||
};
|
};
|
||||||
Ok((remaining, element))
|
if in_section(context, context_name.as_str()) {
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
|
||||||
fn center_block<'b, 'g, 'r, 's>(
|
|
||||||
context: RefContext<'b, 'g, 'r, 's>,
|
|
||||||
input: OrgSource<'s>,
|
|
||||||
original_input: OrgSource<'s>,
|
|
||||||
) -> Res<OrgSource<'s>, Element<'s>> {
|
|
||||||
let (remaining, (source, children)) =
|
|
||||||
greater_block_body(context, input, original_input, "center", "center block")?;
|
|
||||||
Ok((
|
|
||||||
remaining,
|
|
||||||
Element::CenterBlock(CenterBlock { source, children }),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
|
||||||
fn quote_block<'b, 'g, 'r, 's>(
|
|
||||||
context: RefContext<'b, 'g, 'r, 's>,
|
|
||||||
input: OrgSource<'s>,
|
|
||||||
original_input: OrgSource<'s>,
|
|
||||||
) -> Res<OrgSource<'s>, Element<'s>> {
|
|
||||||
let (remaining, (source, children)) =
|
|
||||||
greater_block_body(context, input, original_input, "quote", "quote block")?;
|
|
||||||
Ok((
|
|
||||||
remaining,
|
|
||||||
Element::QuoteBlock(QuoteBlock { source, children }),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
|
||||||
fn special_block<'s>(
|
|
||||||
name: &'s str,
|
|
||||||
) -> impl for<'b, 'g, 'r> Fn(
|
|
||||||
RefContext<'b, 'g, 'r, 's>,
|
|
||||||
OrgSource<'s>,
|
|
||||||
OrgSource<'s>,
|
|
||||||
) -> Res<OrgSource<'s>, Element<'s>>
|
|
||||||
+ 's {
|
|
||||||
let context_name = format!("special block {}", name);
|
|
||||||
move |context, input, original_input| {
|
|
||||||
_special_block(context, input, original_input, name, context_name.as_str())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
|
||||||
fn _special_block<'c, 'b, 'g, 'r, 's>(
|
|
||||||
context: RefContext<'b, 'g, 'r, 's>,
|
|
||||||
input: OrgSource<'s>,
|
|
||||||
original_input: OrgSource<'s>,
|
|
||||||
name: &'s str,
|
|
||||||
context_name: &'c str,
|
|
||||||
) -> Res<OrgSource<'s>, Element<'s>> {
|
|
||||||
let (remaining, parameters) = opt(tuple((space1, parameters)))(input)?;
|
|
||||||
let (remaining, (source, children)) =
|
|
||||||
greater_block_body(context, remaining, original_input, name, context_name)?;
|
|
||||||
Ok((
|
|
||||||
remaining,
|
|
||||||
Element::SpecialBlock(SpecialBlock {
|
|
||||||
source,
|
|
||||||
children,
|
|
||||||
name,
|
|
||||||
parameters: parameters.map(|(_, parameters)| Into::<&str>::into(parameters)),
|
|
||||||
}),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
|
||||||
fn greater_block_body<'c, 'b, 'g, 'r, 's>(
|
|
||||||
context: RefContext<'b, 'g, 'r, 's>,
|
|
||||||
input: OrgSource<'s>,
|
|
||||||
original_input: OrgSource<'s>,
|
|
||||||
name: &'c str,
|
|
||||||
context_name: &'c str,
|
|
||||||
) -> Res<OrgSource<'s>, (&'s str, Vec<Element<'s>>)> {
|
|
||||||
if in_section(context, context_name) {
|
|
||||||
return Err(nom::Err::Error(CustomError::MyError(MyError(
|
return Err(nom::Err::Error(CustomError::MyError(MyError(
|
||||||
"Cannot nest objects of the same element".into(),
|
"Cannot nest objects of the same element".into(),
|
||||||
))));
|
))));
|
||||||
}
|
}
|
||||||
let exit_with_name = greater_block_end(name);
|
let exit_with_name = greater_block_end(name.into());
|
||||||
let (remaining, _nl) = tuple((space0, line_ending))(input)?;
|
let (remaining, parameters) = opt(tuple((space1, parameters)))(remaining)?;
|
||||||
|
let (remaining, _nl) = line_ending(remaining)?;
|
||||||
let contexts = [
|
let contexts = [
|
||||||
ContextElement::ConsumeTrailingWhitespace(true),
|
ContextElement::ConsumeTrailingWhitespace(true),
|
||||||
ContextElement::Context(context_name),
|
ContextElement::Context(context_name.as_str()),
|
||||||
ContextElement::ExitMatcherNode(ExitMatcherNode {
|
ContextElement::ExitMatcherNode(ExitMatcherNode {
|
||||||
class: ExitClass::Alpha,
|
class: ExitClass::Alpha,
|
||||||
exit_matcher: &exit_with_name,
|
exit_matcher: &exit_with_name,
|
||||||
@ -156,6 +76,11 @@ fn greater_block_body<'c, 'b, 'g, 'r, 's>(
|
|||||||
let parser_context = context.with_additional_node(&contexts[0]);
|
let parser_context = context.with_additional_node(&contexts[0]);
|
||||||
let parser_context = parser_context.with_additional_node(&contexts[1]);
|
let parser_context = parser_context.with_additional_node(&contexts[1]);
|
||||||
let parser_context = parser_context.with_additional_node(&contexts[2]);
|
let parser_context = parser_context.with_additional_node(&contexts[2]);
|
||||||
|
let parameters = match parameters {
|
||||||
|
Some((_ws, parameters)) => Some(parameters),
|
||||||
|
None => None,
|
||||||
|
};
|
||||||
|
|
||||||
let element_matcher = parser_with_context!(element(true))(&parser_context);
|
let element_matcher = parser_with_context!(element(true))(&parser_context);
|
||||||
let exit_matcher = parser_with_context!(exit_matcher_parser)(&parser_context);
|
let exit_matcher = parser_with_context!(exit_matcher_parser)(&parser_context);
|
||||||
not(exit_matcher)(remaining)?;
|
not(exit_matcher)(remaining)?;
|
||||||
@ -179,8 +104,16 @@ fn greater_block_body<'c, 'b, 'g, 'r, 's>(
|
|||||||
|
|
||||||
// Not checking if parent exit matcher is causing exit because the greater_block_end matcher asserts we matched a full greater block
|
// Not checking if parent exit matcher is causing exit because the greater_block_end matcher asserts we matched a full greater block
|
||||||
|
|
||||||
let source = get_consumed(original_input, remaining);
|
let source = get_consumed(input, remaining);
|
||||||
Ok((remaining, (Into::<&str>::into(source), children)))
|
Ok((
|
||||||
|
remaining,
|
||||||
|
GreaterBlock {
|
||||||
|
source: source.into(),
|
||||||
|
name: name.into(),
|
||||||
|
parameters: parameters.map(|val| Into::<&str>::into(val)),
|
||||||
|
children,
|
||||||
|
},
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
||||||
@ -190,7 +123,7 @@ fn name<'s>(input: OrgSource<'s>) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
|||||||
|
|
||||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
||||||
fn parameters<'s>(input: OrgSource<'s>) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
fn parameters<'s>(input: OrgSource<'s>) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
||||||
recognize(many_till(anychar, peek(tuple((space0, line_ending)))))(input)
|
is_not("\r\n")(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn greater_block_end<'c>(name: &'c str) -> impl ContextMatcher + 'c {
|
fn greater_block_end<'c>(name: &'c str) -> impl ContextMatcher + 'c {
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
use super::macros::to_ast_node;
|
use super::macros::to_ast_node;
|
||||||
use super::CenterBlock;
|
|
||||||
use super::QuoteBlock;
|
|
||||||
use super::SpecialBlock;
|
|
||||||
use crate::types::AngleLink;
|
use crate::types::AngleLink;
|
||||||
use crate::types::BabelCall;
|
use crate::types::BabelCall;
|
||||||
use crate::types::Bold;
|
use crate::types::Bold;
|
||||||
@ -25,6 +22,7 @@ use crate::types::FixedWidthArea;
|
|||||||
use crate::types::FootnoteDefinition;
|
use crate::types::FootnoteDefinition;
|
||||||
use crate::types::FootnoteReference;
|
use crate::types::FootnoteReference;
|
||||||
use crate::types::GetStandardProperties;
|
use crate::types::GetStandardProperties;
|
||||||
|
use crate::types::GreaterBlock;
|
||||||
use crate::types::Heading;
|
use crate::types::Heading;
|
||||||
use crate::types::HorizontalRule;
|
use crate::types::HorizontalRule;
|
||||||
use crate::types::InlineBabelCall;
|
use crate::types::InlineBabelCall;
|
||||||
@ -71,9 +69,7 @@ pub enum AstNode<'r, 's> {
|
|||||||
Paragraph(&'r Paragraph<'s>),
|
Paragraph(&'r Paragraph<'s>),
|
||||||
PlainList(&'r PlainList<'s>),
|
PlainList(&'r PlainList<'s>),
|
||||||
PlainListItem(&'r PlainListItem<'s>),
|
PlainListItem(&'r PlainListItem<'s>),
|
||||||
CenterBlock(&'r CenterBlock<'s>),
|
GreaterBlock(&'r GreaterBlock<'s>),
|
||||||
QuoteBlock(&'r QuoteBlock<'s>),
|
|
||||||
SpecialBlock(&'r SpecialBlock<'s>),
|
|
||||||
DynamicBlock(&'r DynamicBlock<'s>),
|
DynamicBlock(&'r DynamicBlock<'s>),
|
||||||
FootnoteDefinition(&'r FootnoteDefinition<'s>),
|
FootnoteDefinition(&'r FootnoteDefinition<'s>),
|
||||||
Comment(&'r Comment<'s>),
|
Comment(&'r Comment<'s>),
|
||||||
@ -140,9 +136,7 @@ impl<'r, 's> From<&'r Element<'s>> for AstNode<'r, 's> {
|
|||||||
match value {
|
match value {
|
||||||
Element::Paragraph(inner) => inner.into(),
|
Element::Paragraph(inner) => inner.into(),
|
||||||
Element::PlainList(inner) => inner.into(),
|
Element::PlainList(inner) => inner.into(),
|
||||||
Element::CenterBlock(inner) => inner.into(),
|
Element::GreaterBlock(inner) => inner.into(),
|
||||||
Element::QuoteBlock(inner) => inner.into(),
|
|
||||||
Element::SpecialBlock(inner) => inner.into(),
|
|
||||||
Element::DynamicBlock(inner) => inner.into(),
|
Element::DynamicBlock(inner) => inner.into(),
|
||||||
Element::FootnoteDefinition(inner) => inner.into(),
|
Element::FootnoteDefinition(inner) => inner.into(),
|
||||||
Element::Comment(inner) => inner.into(),
|
Element::Comment(inner) => inner.into(),
|
||||||
@ -206,9 +200,7 @@ to_ast_node!(&'r Section<'s>, AstNode::Section);
|
|||||||
to_ast_node!(&'r Paragraph<'s>, AstNode::Paragraph);
|
to_ast_node!(&'r Paragraph<'s>, AstNode::Paragraph);
|
||||||
to_ast_node!(&'r PlainList<'s>, AstNode::PlainList);
|
to_ast_node!(&'r PlainList<'s>, AstNode::PlainList);
|
||||||
to_ast_node!(&'r PlainListItem<'s>, AstNode::PlainListItem);
|
to_ast_node!(&'r PlainListItem<'s>, AstNode::PlainListItem);
|
||||||
to_ast_node!(&'r CenterBlock<'s>, AstNode::CenterBlock);
|
to_ast_node!(&'r GreaterBlock<'s>, AstNode::GreaterBlock);
|
||||||
to_ast_node!(&'r QuoteBlock<'s>, AstNode::QuoteBlock);
|
|
||||||
to_ast_node!(&'r SpecialBlock<'s>, AstNode::SpecialBlock);
|
|
||||||
to_ast_node!(&'r DynamicBlock<'s>, AstNode::DynamicBlock);
|
to_ast_node!(&'r DynamicBlock<'s>, AstNode::DynamicBlock);
|
||||||
to_ast_node!(&'r FootnoteDefinition<'s>, AstNode::FootnoteDefinition);
|
to_ast_node!(&'r FootnoteDefinition<'s>, AstNode::FootnoteDefinition);
|
||||||
to_ast_node!(&'r Comment<'s>, AstNode::Comment);
|
to_ast_node!(&'r Comment<'s>, AstNode::Comment);
|
||||||
@ -268,9 +260,7 @@ impl<'r, 's> GetStandardProperties<'s> for AstNode<'r, 's> {
|
|||||||
AstNode::Paragraph(inner) => *inner,
|
AstNode::Paragraph(inner) => *inner,
|
||||||
AstNode::PlainList(inner) => *inner,
|
AstNode::PlainList(inner) => *inner,
|
||||||
AstNode::PlainListItem(inner) => *inner,
|
AstNode::PlainListItem(inner) => *inner,
|
||||||
AstNode::CenterBlock(inner) => *inner,
|
AstNode::GreaterBlock(inner) => *inner,
|
||||||
AstNode::QuoteBlock(inner) => *inner,
|
|
||||||
AstNode::SpecialBlock(inner) => *inner,
|
|
||||||
AstNode::DynamicBlock(inner) => *inner,
|
AstNode::DynamicBlock(inner) => *inner,
|
||||||
AstNode::FootnoteDefinition(inner) => *inner,
|
AstNode::FootnoteDefinition(inner) => *inner,
|
||||||
AstNode::Comment(inner) => *inner,
|
AstNode::Comment(inner) => *inner,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use super::greater_element::DynamicBlock;
|
use super::greater_element::DynamicBlock;
|
||||||
use super::greater_element::FootnoteDefinition;
|
use super::greater_element::FootnoteDefinition;
|
||||||
|
use super::greater_element::GreaterBlock;
|
||||||
use super::greater_element::PlainList;
|
use super::greater_element::PlainList;
|
||||||
use super::greater_element::PropertyDrawer;
|
use super::greater_element::PropertyDrawer;
|
||||||
use super::greater_element::Table;
|
use super::greater_element::Table;
|
||||||
@ -18,21 +19,16 @@ use super::lesser_element::Paragraph;
|
|||||||
use super::lesser_element::Planning;
|
use super::lesser_element::Planning;
|
||||||
use super::lesser_element::SrcBlock;
|
use super::lesser_element::SrcBlock;
|
||||||
use super::lesser_element::VerseBlock;
|
use super::lesser_element::VerseBlock;
|
||||||
use super::CenterBlock;
|
|
||||||
use super::Drawer;
|
use super::Drawer;
|
||||||
use super::GetStandardProperties;
|
use super::GetStandardProperties;
|
||||||
use super::QuoteBlock;
|
|
||||||
use super::SetSource;
|
use super::SetSource;
|
||||||
use super::SpecialBlock;
|
|
||||||
use super::StandardProperties;
|
use super::StandardProperties;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Element<'s> {
|
pub enum Element<'s> {
|
||||||
Paragraph(Paragraph<'s>),
|
Paragraph(Paragraph<'s>),
|
||||||
PlainList(PlainList<'s>),
|
PlainList(PlainList<'s>),
|
||||||
CenterBlock(CenterBlock<'s>),
|
GreaterBlock(GreaterBlock<'s>),
|
||||||
QuoteBlock(QuoteBlock<'s>),
|
|
||||||
SpecialBlock(SpecialBlock<'s>),
|
|
||||||
DynamicBlock(DynamicBlock<'s>),
|
DynamicBlock(DynamicBlock<'s>),
|
||||||
FootnoteDefinition(FootnoteDefinition<'s>),
|
FootnoteDefinition(FootnoteDefinition<'s>),
|
||||||
Comment(Comment<'s>),
|
Comment(Comment<'s>),
|
||||||
@ -60,9 +56,7 @@ impl<'s> SetSource<'s> for Element<'s> {
|
|||||||
match self {
|
match self {
|
||||||
Element::Paragraph(obj) => obj.source = source,
|
Element::Paragraph(obj) => obj.source = source,
|
||||||
Element::PlainList(obj) => obj.source = source,
|
Element::PlainList(obj) => obj.source = source,
|
||||||
Element::CenterBlock(obj) => obj.source = source,
|
Element::GreaterBlock(obj) => obj.source = source,
|
||||||
Element::QuoteBlock(obj) => obj.source = source,
|
|
||||||
Element::SpecialBlock(obj) => obj.source = source,
|
|
||||||
Element::DynamicBlock(obj) => obj.source = source,
|
Element::DynamicBlock(obj) => obj.source = source,
|
||||||
Element::FootnoteDefinition(obj) => obj.source = source,
|
Element::FootnoteDefinition(obj) => obj.source = source,
|
||||||
Element::Comment(obj) => obj.source = source,
|
Element::Comment(obj) => obj.source = source,
|
||||||
@ -91,9 +85,7 @@ impl<'s> GetStandardProperties<'s> for Element<'s> {
|
|||||||
match self {
|
match self {
|
||||||
Element::Paragraph(inner) => inner,
|
Element::Paragraph(inner) => inner,
|
||||||
Element::PlainList(inner) => inner,
|
Element::PlainList(inner) => inner,
|
||||||
Element::CenterBlock(inner) => inner,
|
Element::GreaterBlock(inner) => inner,
|
||||||
Element::QuoteBlock(inner) => inner,
|
|
||||||
Element::SpecialBlock(inner) => inner,
|
|
||||||
Element::DynamicBlock(inner) => inner,
|
Element::DynamicBlock(inner) => inner,
|
||||||
Element::FootnoteDefinition(inner) => inner,
|
Element::FootnoteDefinition(inner) => inner,
|
||||||
Element::Comment(inner) => inner,
|
Element::Comment(inner) => inner,
|
||||||
|
@ -44,19 +44,7 @@ pub enum CheckboxType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct CenterBlock<'s> {
|
pub struct GreaterBlock<'s> {
|
||||||
pub source: &'s str,
|
|
||||||
pub children: Vec<Element<'s>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct QuoteBlock<'s> {
|
|
||||||
pub source: &'s str,
|
|
||||||
pub children: Vec<Element<'s>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct SpecialBlock<'s> {
|
|
||||||
pub source: &'s str,
|
pub source: &'s str,
|
||||||
pub name: &'s str,
|
pub name: &'s str,
|
||||||
pub parameters: Option<&'s str>,
|
pub parameters: Option<&'s str>,
|
||||||
@ -122,19 +110,7 @@ impl<'s> StandardProperties<'s> for PlainListItem<'s> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'s> StandardProperties<'s> for CenterBlock<'s> {
|
impl<'s> StandardProperties<'s> for GreaterBlock<'s> {
|
||||||
fn get_source<'b>(&'b self) -> &'s str {
|
|
||||||
self.source
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'s> StandardProperties<'s> for QuoteBlock<'s> {
|
|
||||||
fn get_source<'b>(&'b self) -> &'s str {
|
|
||||||
self.source
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'s> StandardProperties<'s> for SpecialBlock<'s> {
|
|
||||||
fn get_source<'b>(&'b self) -> &'s str {
|
fn get_source<'b>(&'b self) -> &'s str {
|
||||||
self.source
|
self.source
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,11 @@ pub use document::Section;
|
|||||||
pub use document::TodoKeywordType;
|
pub use document::TodoKeywordType;
|
||||||
pub use element::Element;
|
pub use element::Element;
|
||||||
pub use get_standard_properties::GetStandardProperties;
|
pub use get_standard_properties::GetStandardProperties;
|
||||||
pub use greater_element::CenterBlock;
|
|
||||||
pub use greater_element::CheckboxType;
|
pub use greater_element::CheckboxType;
|
||||||
pub use greater_element::Drawer;
|
pub use greater_element::Drawer;
|
||||||
pub use greater_element::DynamicBlock;
|
pub use greater_element::DynamicBlock;
|
||||||
pub use greater_element::FootnoteDefinition;
|
pub use greater_element::FootnoteDefinition;
|
||||||
|
pub use greater_element::GreaterBlock;
|
||||||
pub use greater_element::IndentationLevel;
|
pub use greater_element::IndentationLevel;
|
||||||
pub use greater_element::NodeProperty;
|
pub use greater_element::NodeProperty;
|
||||||
pub use greater_element::PlainList;
|
pub use greater_element::PlainList;
|
||||||
@ -31,8 +31,6 @@ pub use greater_element::PlainListItemCounter;
|
|||||||
pub use greater_element::PlainListItemPreBlank;
|
pub use greater_element::PlainListItemPreBlank;
|
||||||
pub use greater_element::PlainListType;
|
pub use greater_element::PlainListType;
|
||||||
pub use greater_element::PropertyDrawer;
|
pub use greater_element::PropertyDrawer;
|
||||||
pub use greater_element::QuoteBlock;
|
|
||||||
pub use greater_element::SpecialBlock;
|
|
||||||
pub use greater_element::Table;
|
pub use greater_element::Table;
|
||||||
pub use greater_element::TableRow;
|
pub use greater_element::TableRow;
|
||||||
pub use lesser_element::BabelCall;
|
pub use lesser_element::BabelCall;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user