@@ -155,26 +155,17 @@ impl Parser {
155155
156156 let specs = TagSpec :: load_builtin_specs ( ) . unwrap_or_default ( ) ;
157157
158- // Check if this is a closing tag
158+ // Check if this is a closing or branch tag
159159 for ( _, spec) in specs. iter ( ) {
160- if Some ( & tag_name) == spec. closing . as_ref ( ) {
161- let node = Node :: Django ( DjangoNode :: Tag ( TagNode :: Closing {
162- name : tag_name . clone ( ) ,
163- bits : bits [ 1 .. ] . to_vec ( ) ,
164- } ) ) ;
160+ if Some ( & tag_name) == spec. closing . as_ref ( )
161+ || spec . intermediates . as_ref ( )
162+ . map ( |ints| ints . iter ( ) . any ( |i| i . name == tag_name ) )
163+ . unwrap_or ( false )
164+ {
165165 return Err ( ParserError :: ErrorSignal ( Signal :: SpecialTag ( tag_name) ) ) ;
166166 }
167167 }
168168
169- // Check if this is a branch tag according to any spec
170- for ( _, spec) in specs. iter ( ) {
171- if let Some ( intermediates) = & spec. intermediates {
172- if intermediates. iter ( ) . any ( |i| i. name == tag_name) {
173- return Err ( ParserError :: ErrorSignal ( Signal :: SpecialTag ( tag_name) ) ) ;
174- }
175- }
176- }
177-
178169 let tag_spec = specs. get ( tag_name. as_str ( ) ) . cloned ( ) ;
179170 let mut children = Vec :: new ( ) ;
180171 let mut current_branch: Option < ( String , Vec < String > , Vec < Node > ) > = None ;
@@ -212,7 +203,8 @@ impl Parser {
212203 }
213204 // Check if intermediate tag
214205 if let Some ( intermediates) = & spec. intermediates {
215- if let Some ( intermediate) = intermediates. iter ( ) . find ( |i| i. name == tag) {
206+ if let Some ( intermediate) = intermediates. iter ( ) . find ( |i| i. name == tag)
207+ {
216208 // If we have a current branch, add it to children
217209 if let Some ( ( name, bits, branch_children) ) = current_branch {
218210 children. push ( Node :: Django ( DjangoNode :: Tag ( TagNode :: Branch {
0 commit comments