Skip to content

Commit db1f0f7

Browse files
committed
Support closed void tags with content in code blocks
1 parent f599b03 commit db1f0f7

File tree

8 files changed

+69
-42
lines changed

8 files changed

+69
-42
lines changed

src/Compiler/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlMarkupParser.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,28 @@ private MarkupStartTagSyntax ParseStartTag(
704704
{
705705
// There is no matching end void tag.
706706
tagMode = MarkupTagMode.Void;
707+
708+
// Try looking (until the end of the code block) for a matching end tag.
709+
// This needs to be supported in case the tag is actually a component.
710+
while (!EndOfFile && !At(SyntaxKind.RightBrace))
711+
{
712+
if (At(SyntaxKind.OpenAngle) && NextIs(SyntaxKind.ForwardSlash))
713+
{
714+
NextToken();
715+
Assert(SyntaxKind.ForwardSlash);
716+
NextToken();
717+
if (At(SyntaxKind.Text) && string.Equals(CurrentToken.Content, tagName, StringComparison.OrdinalIgnoreCase))
718+
{
719+
// Found matching end tag.
720+
tagMode = MarkupTagMode.Normal;
721+
break;
722+
}
723+
}
724+
else
725+
{
726+
NextToken();
727+
}
728+
}
707729
}
708730

709731
// Go back to the bookmark and just finish this tag at the close angle

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TestFiles/ParserTests/HtmlBlockTest/Component_Col.cspans.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
Transition span at (0:0,0 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [27] )
33
MetaCode span at (1:0,1 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [27] )
44
Markup span at (2:0,2 [5] ) (Accepts:None) - Parent: Tag block at (2:0,2 [5] )
5-
Code span at (7:0,7 [19] ) (Accepts:Any) - Parent: Statement block at (0:0,0 [27] )
5+
Markup span at (7:0,7 [13] ) (Accepts:Any) - Parent: Markup block at (2:0,2 [24] )
6+
Markup span at (20:0,20 [6] ) (Accepts:None) - Parent: Tag block at (20:0,20 [6] )
7+
Code span at (26:0,26 [0] ) (Accepts:Any) - Parent: Statement block at (0:0,0 [27] )
68
MetaCode span at (26:0,26 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [27] )
79
Markup span at (27:0,27 [0] ) (Accepts:Any) - Parent: Markup block at (0:0,0 [27] )

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TestFiles/ParserTests/HtmlBlockTest/Component_Col.stree.txt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,25 @@
1010
RazorMetaCode - [1..2)::1 - Gen<None> - SpanEditHandler;Accepts:None
1111
LeftBrace;[{];
1212
CSharpCodeBlock - [2..26)::24
13-
MarkupBlock - [2..7)::5
14-
MarkupElement - [2..7)::5
13+
MarkupBlock - [2..26)::24
14+
MarkupElement - [2..26)::24
1515
MarkupStartTag - [2..7)::5 - [<Col>] - Gen<Markup> - SpanEditHandler;Accepts:None
1616
OpenAngle;[<];
1717
Text;[Col];
1818
CloseAngle;[>];
19-
CSharpStatementLiteral - [7..26)::19 - [in code block</Col>] - Gen<Stmt> - SpanEditHandler;Accepts:Any
20-
Keyword;[in];
21-
Whitespace;[ ];
22-
Identifier;[code];
23-
Whitespace;[ ];
24-
Identifier;[block];
25-
LessThan;[<];
26-
Slash;[/];
27-
Identifier;[Col];
28-
GreaterThan;[>];
19+
MarkupTextLiteral - [7..20)::13 - [in code block] - Gen<Markup> - SpanEditHandler;Accepts:Any
20+
Text;[in];
21+
Whitespace;[ ];
22+
Text;[code];
23+
Whitespace;[ ];
24+
Text;[block];
25+
MarkupEndTag - [20..26)::6 - [</Col>] - Gen<Markup> - SpanEditHandler;Accepts:None
26+
OpenAngle;[<];
27+
ForwardSlash;[/];
28+
Text;[Col];
29+
CloseAngle;[>];
30+
CSharpStatementLiteral - [26..26)::0 - [] - Gen<Stmt> - SpanEditHandler;Accepts:Any
31+
Marker;[];
2932
RazorMetaCode - [26..27)::1 - Gen<None> - SpanEditHandler;Accepts:None
3033
RightBrace;[}];
3134
MarkupTextLiteral - [27..27)::0 - [] - Gen<Markup> - SpanEditHandler;Accepts:Any

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TestFiles/ParserTests/HtmlBlockTest/Component_Input.cspans.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
Transition span at (0:0,0 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [31] )
33
MetaCode span at (1:0,1 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [31] )
44
Markup span at (2:0,2 [7] ) (Accepts:None) - Parent: Tag block at (2:0,2 [7] )
5-
Code span at (9:0,9 [21] ) (Accepts:Any) - Parent: Statement block at (0:0,0 [31] )
5+
Markup span at (9:0,9 [13] ) (Accepts:Any) - Parent: Markup block at (2:0,2 [28] )
6+
Markup span at (22:0,22 [8] ) (Accepts:None) - Parent: Tag block at (22:0,22 [8] )
7+
Code span at (30:0,30 [0] ) (Accepts:Any) - Parent: Statement block at (0:0,0 [31] )
68
MetaCode span at (30:0,30 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [31] )
79
Markup span at (31:0,31 [0] ) (Accepts:Any) - Parent: Markup block at (0:0,0 [31] )

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TestFiles/ParserTests/HtmlBlockTest/Component_Input.stree.txt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,25 @@
1010
RazorMetaCode - [1..2)::1 - Gen<None> - SpanEditHandler;Accepts:None
1111
LeftBrace;[{];
1212
CSharpCodeBlock - [2..30)::28
13-
MarkupBlock - [2..9)::7
14-
MarkupElement - [2..9)::7
13+
MarkupBlock - [2..30)::28
14+
MarkupElement - [2..30)::28
1515
MarkupStartTag - [2..9)::7 - [<Input>] - Gen<Markup> - SpanEditHandler;Accepts:None
1616
OpenAngle;[<];
1717
Text;[Input];
1818
CloseAngle;[>];
19-
CSharpStatementLiteral - [9..30)::21 - [in code block</Input>] - Gen<Stmt> - SpanEditHandler;Accepts:Any
20-
Keyword;[in];
21-
Whitespace;[ ];
22-
Identifier;[code];
23-
Whitespace;[ ];
24-
Identifier;[block];
25-
LessThan;[<];
26-
Slash;[/];
27-
Identifier;[Input];
28-
GreaterThan;[>];
19+
MarkupTextLiteral - [9..22)::13 - [in code block] - Gen<Markup> - SpanEditHandler;Accepts:Any
20+
Text;[in];
21+
Whitespace;[ ];
22+
Text;[code];
23+
Whitespace;[ ];
24+
Text;[block];
25+
MarkupEndTag - [22..30)::8 - [</Input>] - Gen<Markup> - SpanEditHandler;Accepts:None
26+
OpenAngle;[<];
27+
ForwardSlash;[/];
28+
Text;[Input];
29+
CloseAngle;[>];
30+
CSharpStatementLiteral - [30..30)::0 - [] - Gen<Stmt> - SpanEditHandler;Accepts:Any
31+
Marker;[];
2932
RazorMetaCode - [30..31)::1 - Gen<None> - SpanEditHandler;Accepts:None
3033
RightBrace;[}];
3134
MarkupTextLiteral - [31..31)::0 - [] - Gen<Markup> - SpanEditHandler;Accepts:Any

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TestFiles/ParserTests/HtmlBlockTest/VoidTag_ClosedLater.cspans.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Transition span at (0:0,0 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [30] )
33
MetaCode span at (1:0,1 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [30] )
44
Markup span at (2:0,2 [5] ) (Accepts:None) - Parent: Tag block at (2:0,2 [5] )
5-
Code span at (7:0,7 [16] ) (Accepts:Any) - Parent: Statement block at (0:0,0 [30] )
5+
Markup span at (7:0,7 [16] ) (Accepts:Any) - Parent: Markup block at (2:0,2 [27] )
66
Markup span at (23:0,23 [6] ) (Accepts:None) - Parent: Tag block at (23:0,23 [6] )
77
Code span at (29:0,29 [0] ) (Accepts:Any) - Parent: Statement block at (0:0,0 [30] )
88
MetaCode span at (29:0,29 [1] ) (Accepts:None) - Parent: Statement block at (0:0,0 [30] )

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TestFiles/ParserTests/HtmlBlockTest/VoidTag_ClosedLater.diag.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/TestFiles/ParserTests/HtmlBlockTest/VoidTag_ClosedLater.stree.txt

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,20 @@
1010
RazorMetaCode - [1..2)::1 - Gen<None> - SpanEditHandler;Accepts:None
1111
LeftBrace;[{];
1212
CSharpCodeBlock - [2..29)::27
13-
MarkupBlock - [2..7)::5
14-
MarkupElement - [2..7)::5
13+
MarkupBlock - [2..29)::27
14+
MarkupElement - [2..29)::27
1515
MarkupStartTag - [2..7)::5 - [<col>] - Gen<Markup> - SpanEditHandler;Accepts:None
1616
OpenAngle;[<];
1717
Text;[col];
1818
CloseAngle;[>];
19-
CSharpStatementLiteral - [7..23)::16 - [while (true) { }] - Gen<Stmt> - SpanEditHandler;Accepts:Any
20-
Keyword;[while];
21-
Whitespace;[ ];
22-
LeftParenthesis;[(];
23-
Keyword;[true];
24-
RightParenthesis;[)];
25-
Whitespace;[ ];
26-
LeftBrace;[{];
27-
Whitespace;[ ];
28-
RightBrace;[}];
29-
MarkupBlock - [23..29)::6
30-
MarkupElement - [23..29)::6
19+
MarkupTextLiteral - [7..23)::16 - [while (true) { }] - Gen<Markup> - SpanEditHandler;Accepts:Any
20+
Text;[while];
21+
Whitespace;[ ];
22+
Text;[(true)];
23+
Whitespace;[ ];
24+
Text;[{];
25+
Whitespace;[ ];
26+
Text;[}];
3127
MarkupEndTag - [23..29)::6 - [</col>] - Gen<Markup> - SpanEditHandler;Accepts:None
3228
OpenAngle;[<];
3329
ForwardSlash;[/];

0 commit comments

Comments
 (0)