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();
// Check if this is a closing tag
// Check if this is a closing or branch tag
for (_, spec) in specs.iter() {
if Some(&tag_name) == spec.closing.as_ref() {
let node = Node::Django(DjangoNode::Tag(TagNode::Closing {
name: tag_name.clone(),
bits: bits[1..].to_vec(),
}));
if Some(&tag_name) == spec.closing.as_ref()
|| spec.intermediates.as_ref()
.map(|ints| ints.iter().any(|i| i.name == tag_name))
.unwrap_or(false)
{
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 mut children = Vec::new();
let mut current_branch: Option<(String, Vec<String>, Vec<Node>)> = None;
@ -212,7 +203,8 @@ impl Parser {
}
// Check if intermediate tag
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 let Some((name, bits, branch_children)) = current_branch {
children.push(Node::Django(DjangoNode::Tag(TagNode::Branch {