Add a context element for tracking whether or not elements should consume their trailing whitespace.

This commit is contained in:
Tom Alexander
2023-04-10 10:36:16 -04:00
parent 6813c7c991
commit 9a0172e1a4
6 changed files with 60 additions and 10 deletions

View File

@@ -115,6 +115,26 @@ impl<'r, 's> ContextTree<'r, 's> {
}
None
}
/// Indicates if elements should consume the whitespace after them.
///
/// Defaults to true.
pub fn should_consume_trailing_whitespace(&self) -> bool {
self._should_consume_trailing_whitespace().unwrap_or(true)
}
fn _should_consume_trailing_whitespace(&self) -> Option<bool> {
for current_node in self.iter() {
let context_element = current_node.get_data();
match context_element {
ContextElement::ConsumeTrailingWhitespace(should) => {
return Some(*should);
}
_ => {}
}
}
None
}
}
#[derive(Debug)]
@@ -123,14 +143,19 @@ pub enum ContextElement<'r, 's> {
///
/// This is used for look-behind.
DocumentRoot(&'s str),
/// Stores a parser that indicates that children should exit upon matching an exit matcher.
ExitMatcherNode(ExitMatcherNode<'r>),
Context(&'r str),
/// Stores the indentation level of the current list item
/// Stores the indentation level of the current list item.
ListItem(usize),
/// Stores the name of the greater block
/// Stores the name of the greater block.
GreaterBlock(&'s str),
/// Indicates if elements should consume the whitespace after them.
ConsumeTrailingWhitespace(bool),
}
#[derive(Debug)]