adjust checking for special tags

This commit is contained in:
Josh Thomas 2025-01-04 15:42:27 -06:00
parent 1c5740b4f6
commit 2fe1bb8fd6

View file

@ -155,26 +155,17 @@ impl Parser {
let specs = TagSpec::load_builtin_specs().unwrap_or_default(); let specs = TagSpec::load_builtin_specs().unwrap_or_default();
// Check if this is a closing tag // Check if this is a closing or branch tag
for (_, spec) in specs.iter() { for (_, spec) in specs.iter() {
if Some(&tag_name) == spec.closing.as_ref() { if Some(&tag_name) == spec.closing.as_ref()
let node = Node::Django(DjangoNode::Tag(TagNode::Closing { || spec.intermediates.as_ref()
name: tag_name.clone(), .map(|ints| ints.iter().any(|i| i.name == tag_name))
bits: bits[1..].to_vec(), .unwrap_or(false)
})); {
return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name))); return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name)));
} }
} }
// Check if this is a branch tag according to any spec
for (_, spec) in specs.iter() {
if let Some(intermediates) = &spec.intermediates {
if intermediates.iter().any(|i| i.name == tag_name) {
return Err(ParserError::ErrorSignal(Signal::SpecialTag(tag_name)));
}
}
}
let tag_spec = specs.get(tag_name.as_str()).cloned(); let tag_spec = specs.get(tag_name.as_str()).cloned();
let mut children = Vec::new(); let mut children = Vec::new();
let mut current_branch: Option<(String, Vec<String>, Vec<Node>)> = None; let mut current_branch: Option<(String, Vec<String>, Vec<Node>)> = None;
@ -212,7 +203,8 @@ impl Parser {
} }
// Check if intermediate tag // Check if intermediate tag
if let Some(intermediates) = &spec.intermediates { if let Some(intermediates) = &spec.intermediates {
if let Some(intermediate) = intermediates.iter().find(|i| i.name == tag) { if let Some(intermediate) = intermediates.iter().find(|i| i.name == tag)
{
// If we have a current branch, add it to children // If we have a current branch, add it to children
if let Some((name, bits, branch_children)) = current_branch { if let Some((name, bits, branch_children)) = current_branch {
children.push(Node::Django(DjangoNode::Tag(TagNode::Branch { children.push(Node::Django(DjangoNode::Tag(TagNode::Branch {