Converted HtmlAttributeTest

This commit is contained in:
Ajay Bhargav Baaskaran 2018-06-27 14:04:56 -07:00
parent 5950928baa
commit 048a6ec3ea
41 changed files with 1162 additions and 511 deletions

View File

@ -923,8 +923,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
if (UseBaselineTests && !IsTheory)
{
SyntaxTreeVerifier.Verify(result);
AssertSyntaxTreeNodeMatchesBaseline(result);
BaselineTest(result);
return;
}

View File

@ -3,465 +3,225 @@
using System;
using System.Linq;
using Moq;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
public class HtmlAttributeTest : CsHtmlMarkupParserTestBase
{
public static TheoryData SymbolBoundAttributeNames
public HtmlAttributeTest()
{
get
{
return new TheoryData<string>
{
"[item]",
"[(item,",
"(click)",
"(^click)",
"*something",
"#local",
};
}
UseBaselineTests = true;
}
[Theory]
[MemberData(nameof(SymbolBoundAttributeNames))]
public void SymbolBoundAttributes_BeforeEqualWhitespace(string attributeName)
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace1()
{
// Arrange
var attributeNameLength = attributeName.Length;
var newlineLength = Environment.NewLine.Length;
var prefixLocation1 = new SourceLocation(
absoluteIndex: 2,
lineIndex: 0,
characterIndex: 2);
var suffixLocation1 = new SourceLocation(
absoluteIndex: 8 + newlineLength + attributeNameLength,
lineIndex: 1,
characterIndex: 5);
var valueLocation1 = new SourceLocation(
absoluteIndex: 5 + attributeNameLength + newlineLength,
lineIndex: 1,
characterIndex: 2);
var prefixLocation2 = SourceLocationTracker.Advance(suffixLocation1, "'");
var suffixLocation2 = new SourceLocation(
absoluteIndex: 15 + attributeNameLength * 2 + newlineLength * 2,
lineIndex: 2,
characterIndex: 4);
var valueLocation2 = new SourceLocation(
absoluteIndex: 12 + attributeNameLength * 2 + newlineLength * 2,
lineIndex: 2,
characterIndex: 1);
// Act & Assert
ParseBlockTest(
$"<a {attributeName}{Environment.NewLine}='Foo'\t{attributeName}={Environment.NewLine}'Bar' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
attributeName,
prefix: new LocationTagged<string>(
$" {attributeName}{Environment.NewLine}='", prefixLocation1),
suffix: new LocationTagged<string>("'", suffixLocation1)),
Factory.Markup($" {attributeName}{Environment.NewLine}='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, valueLocation1),
value: new LocationTagged<string>("Foo", valueLocation1))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
new MarkupBlock(
new AttributeBlockChunkGenerator(
attributeName,
prefix: new LocationTagged<string>(
$"\t{attributeName}={Environment.NewLine}'", prefixLocation2),
suffix: new LocationTagged<string>("'", suffixLocation2)),
Factory.Markup($"\t{attributeName}={Environment.NewLine}'").With(SpanChunkGenerator.Null),
Factory.Markup("Bar").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, valueLocation2),
value: new LocationTagged<string>("Bar", valueLocation2))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
var attributeName = "[item]";
ParseBlockTest($"<a {attributeName}{Environment.NewLine}='Foo'\t{attributeName}={Environment.NewLine}'Bar' />");
}
[Theory]
[MemberData(nameof(SymbolBoundAttributeNames))]
public void SymbolBoundAttributes_Whitespace(string attributeName)
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace2()
{
// Arrange
var attributeNameLength = attributeName.Length;
var newlineLength = Environment.NewLine.Length;
var prefixLocation1 = new SourceLocation(
absoluteIndex: 2,
lineIndex: 0,
characterIndex: 2);
var suffixLocation1 = new SourceLocation(
absoluteIndex: 10 + newlineLength + attributeNameLength,
lineIndex: 1,
characterIndex: 7 + attributeNameLength);
var valueLocation1 = new SourceLocation(
absoluteIndex: 7 + attributeNameLength + newlineLength,
lineIndex: 1,
characterIndex: 4 + attributeNameLength);
var prefixLocation2 = SourceLocationTracker.Advance(suffixLocation1, "'");
var suffixLocation2 = new SourceLocation(
absoluteIndex: 17 + attributeNameLength * 2 + newlineLength * 2,
lineIndex: 2,
characterIndex: 5 + attributeNameLength);
var valueLocation2 = new SourceLocation(
absoluteIndex: 14 + attributeNameLength * 2 + newlineLength * 2,
lineIndex: 2,
characterIndex: 2 + attributeNameLength);
// Act & Assert
ParseBlockTest(
$"<a {Environment.NewLine} {attributeName}='Foo'\t{Environment.NewLine}{attributeName}='Bar' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
attributeName,
prefix: new LocationTagged<string>(
$" {Environment.NewLine} {attributeName}='", prefixLocation1),
suffix: new LocationTagged<string>("'", suffixLocation1)),
Factory.Markup($" {Environment.NewLine} {attributeName}='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, valueLocation1),
value: new LocationTagged<string>("Foo", valueLocation1))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
new MarkupBlock(
new AttributeBlockChunkGenerator(
attributeName,
prefix: new LocationTagged<string>(
$"\t{Environment.NewLine}{attributeName}='", prefixLocation2),
suffix: new LocationTagged<string>("'", suffixLocation2)),
Factory.Markup($"\t{Environment.NewLine}{attributeName}='").With(SpanChunkGenerator.Null),
Factory.Markup("Bar").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, valueLocation2),
value: new LocationTagged<string>("Bar", valueLocation2))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
var attributeName = "[(item,";
ParseBlockTest($"<a {attributeName}{Environment.NewLine}='Foo'\t{attributeName}={Environment.NewLine}'Bar' />");
}
[Theory]
[MemberData(nameof(SymbolBoundAttributeNames))]
public void SymbolBoundAttributes(string attributeName)
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace3()
{
// Arrange
var attributeNameLength = attributeName.Length;
var suffixLocation = 8 + attributeNameLength;
var valueLocation = 5 + attributeNameLength;
var attributeName = "(click)";
ParseBlockTest($"<a {attributeName}{Environment.NewLine}='Foo'\t{attributeName}={Environment.NewLine}'Bar' />");
}
// Act & Assert
ParseBlockTest($"<a {attributeName}='Foo' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
attributeName,
prefix: new LocationTagged<string>($" {attributeName}='", 2, 0, 2),
suffix: new LocationTagged<string>("'", suffixLocation, 0, suffixLocation)),
Factory.Markup($" {attributeName}='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, valueLocation, 0, valueLocation),
value: new LocationTagged<string>("Foo", valueLocation, 0, valueLocation))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace4()
{
var attributeName = "(^click)";
ParseBlockTest($"<a {attributeName}{Environment.NewLine}='Foo'\t{attributeName}={Environment.NewLine}'Bar' />");
}
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace5()
{
var attributeName = "*something";
ParseBlockTest($"<a {attributeName}{Environment.NewLine}='Foo'\t{attributeName}={Environment.NewLine}'Bar' />");
}
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace6()
{
var attributeName = "#local";
ParseBlockTest($"<a {attributeName}{Environment.NewLine}='Foo'\t{attributeName}={Environment.NewLine}'Bar' />");
}
[Fact]
public void SymbolBoundAttributes_Whitespace1()
{
var attributeName = "[item]";
ParseBlockTest($"<a {Environment.NewLine} {attributeName}='Foo'\t{Environment.NewLine}{attributeName}='Bar' />");
}
[Fact]
public void SymbolBoundAttributes_Whitespace2()
{
var attributeName = "[(item,";
ParseBlockTest($"<a {Environment.NewLine} {attributeName}='Foo'\t{Environment.NewLine}{attributeName}='Bar' />");
}
[Fact]
public void SymbolBoundAttributes_Whitespace3()
{
var attributeName = "(click)";
ParseBlockTest($"<a {Environment.NewLine} {attributeName}='Foo'\t{Environment.NewLine}{attributeName}='Bar' />");
}
[Fact]
public void SymbolBoundAttributes_Whitespace4()
{
var attributeName = "(^click)";
ParseBlockTest($"<a {Environment.NewLine} {attributeName}='Foo'\t{Environment.NewLine}{attributeName}='Bar' />");
}
[Fact]
public void SymbolBoundAttributes_Whitespace5()
{
var attributeName = "*something";
ParseBlockTest($"<a {Environment.NewLine} {attributeName}='Foo'\t{Environment.NewLine}{attributeName}='Bar' />");
}
[Fact]
public void SymbolBoundAttributes_Whitespace6()
{
var attributeName = "#local";
ParseBlockTest($"<a {Environment.NewLine} {attributeName}='Foo'\t{Environment.NewLine}{attributeName}='Bar' />");
}
[Fact]
public void SymbolBoundAttributes1()
{
var attributeName = "[item]";
ParseBlockTest($"<a {attributeName}='Foo' />");
}
[Fact]
public void SymbolBoundAttributes2()
{
var attributeName = "[(item,";
ParseBlockTest($"<a {attributeName}='Foo' />");
}
[Fact]
public void SymbolBoundAttributes3()
{
var attributeName = "(click)";
ParseBlockTest($"<a {attributeName}='Foo' />");
}
[Fact]
public void SymbolBoundAttributes4()
{
var attributeName = "(^click)";
ParseBlockTest($"<a {attributeName}='Foo' />");
}
[Fact]
public void SymbolBoundAttributes5()
{
var attributeName = "*something";
ParseBlockTest($"<a {attributeName}='Foo' />");
}
[Fact]
public void SymbolBoundAttributes6()
{
var attributeName = "#local";
ParseBlockTest($"<a {attributeName}='Foo' />");
}
[Fact]
public void SimpleLiteralAttribute()
{
ParseBlockTest("<a href='Foo' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 12, 0, 12)),
Factory.Markup(" href='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href='Foo' />");
}
[Fact]
public void SimpleLiteralAttributeWithWhitespaceSurroundingEquals()
{
ParseBlockTest("<a href \f\r\n= \t\n'Foo' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
name: "href",
prefix: new LocationTagged<string>(" href \f\r\n= \t\n'", 2, 0, 2),
suffix: new LocationTagged<string>("'", 19, 2, 4)),
Factory.Markup(" href \f\r\n= \t\n'").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, 16, 2, 1), value: new LocationTagged<string>("Foo", 16, 2, 1))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href \f\r\n= \t\n'Foo' />");
}
[Fact]
public void DynamicAttributeWithWhitespaceSurroundingEquals()
{
ParseBlockTest("<a href \n= \r\n'@Foo' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
name: "href",
prefix: new LocationTagged<string>(" href \n= \r\n'", 2, 0, 2),
suffix: new LocationTagged<string>("'", 18, 2, 5)),
Factory.Markup(" href \n= \r\n'").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 14, 2, 1), 14, 2, 1),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("Foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href \n= \r\n'@Foo' />");
}
[Fact]
public void MultiPartLiteralAttribute()
{
ParseBlockTest("<a href='Foo Bar Baz' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 20, 0, 20)),
Factory.Markup(" href='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(new LiteralAttributeChunkGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
Factory.Markup(" Bar").With(new LiteralAttributeChunkGenerator(prefix: new LocationTagged<string>(" ", 12, 0, 12), value: new LocationTagged<string>("Bar", 13, 0, 13))),
Factory.Markup(" Baz").With(new LiteralAttributeChunkGenerator(prefix: new LocationTagged<string>(" ", 16, 0, 16), value: new LocationTagged<string>("Baz", 17, 0, 17))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href='Foo Bar Baz' />");
}
[Fact]
public void DoubleQuotedLiteralAttribute()
{
ParseBlockTest("<a href=\"Foo Bar Baz\" />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "href", prefix: new LocationTagged<string>(" href=\"", 2, 0, 2), suffix: new LocationTagged<string>("\"", 20, 0, 20)),
Factory.Markup(" href=\"").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(new LiteralAttributeChunkGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
Factory.Markup(" Bar").With(new LiteralAttributeChunkGenerator(prefix: new LocationTagged<string>(" ", 12, 0, 12), value: new LocationTagged<string>("Bar", 13, 0, 13))),
Factory.Markup(" Baz").With(new LiteralAttributeChunkGenerator(prefix: new LocationTagged<string>(" ", 16, 0, 16), value: new LocationTagged<string>("Baz", 17, 0, 17))),
Factory.Markup("\"").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href=\"Foo Bar Baz\" />");
}
[Fact]
public void NewLinePrecedingAttribute()
{
ParseBlockTest("<a\r\nhref='Foo' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
name: "href",
prefix: new LocationTagged<string>("\r\nhref='", 2, 0, 2),
suffix: new LocationTagged<string>("'", 13, 1, 9)),
Factory.Markup("\r\nhref='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, 10, 1, 6),
value: new LocationTagged<string>("Foo", 10, 1, 6))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a\r\nhref='Foo' />");
}
[Fact]
public void NewLineBetweenAttributes()
{
ParseBlockTest("<a\nhref='Foo'\r\nabcd='Bar' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator(
name: "href",
prefix: new LocationTagged<string>("\nhref='", 2, 0, 2),
suffix: new LocationTagged<string>("'", 12, 1, 9)),
Factory.Markup("\nhref='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, 9, 1, 6),
value: new LocationTagged<string>("Foo", 9, 1, 6))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
new MarkupBlock(
new AttributeBlockChunkGenerator(
name: "abcd",
prefix: new LocationTagged<string>("\r\nabcd='", 13, 1, 10),
suffix: new LocationTagged<string>("'", 24, 2, 9)),
Factory.Markup("\r\nabcd='").With(SpanChunkGenerator.Null),
Factory.Markup("Bar").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, 21, 2, 6),
value: new LocationTagged<string>("Bar", 21, 2, 6))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a\nhref='Foo'\r\nabcd='Bar' />");
}
[Fact]
public void WhitespaceAndNewLinePrecedingAttribute()
{
ParseBlockTest("<a \t\r\nhref='Foo' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(
new AttributeBlockChunkGenerator(
name: "href",
prefix: new LocationTagged<string>(" \t\r\nhref='", 2, 0, 2),
suffix: new LocationTagged<string>("'", 15, 1, 9)),
Factory.Markup(" \t\r\nhref='").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(
new LiteralAttributeChunkGenerator(
prefix: new LocationTagged<string>(string.Empty, 12, 1, 6),
value: new LocationTagged<string>("Foo", 12, 1, 6))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a \t\r\nhref='Foo' />");
}
[Fact]
public void UnquotedLiteralAttribute()
{
ParseBlockTest("<a href=Foo Bar Baz />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "href", prefix: new LocationTagged<string>(" href=", 2, 0, 2), suffix: new LocationTagged<string>(string.Empty, 11, 0, 11)),
Factory.Markup(" href=").With(SpanChunkGenerator.Null),
Factory.Markup("Foo").With(new LiteralAttributeChunkGenerator(prefix: new LocationTagged<string>(string.Empty, 8, 0, 8), value: new LocationTagged<string>("Foo", 8, 0, 8)))),
new MarkupBlock(Factory.Markup(" Bar")),
new MarkupBlock(Factory.Markup(" Baz")),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href=Foo Bar Baz />");
}
[Fact]
public void SimpleExpressionAttribute()
{
ParseBlockTest("<a href='@foo' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 13, 0, 13)),
Factory.Markup(" href='").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href='@foo' />");
}
[Fact]
public void MultiValueExpressionAttribute()
{
ParseBlockTest("<a href='@foo bar @baz' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 22, 0, 22)),
Factory.Markup(" href='").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup(" bar").With(new LiteralAttributeChunkGenerator(new LocationTagged<string>(" ", 13, 0, 13), new LocationTagged<string>("bar", 14, 0, 14))),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(" ", 17, 0, 17), 18, 0, 18),
Factory.Markup(" ").With(SpanChunkGenerator.Null),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("baz")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href='@foo bar @baz' />");
}
[Fact]
public void VirtualPathAttributesWorkWithConditionalAttributes()
{
ParseBlockTest("<a href='@foo ~/Foo/Bar' />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 23, 0, 23)),
Factory.Markup(" href='").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup(" ~/Foo/Bar")
.With(new LiteralAttributeChunkGenerator(
new LocationTagged<string>(" ", 13, 0, 13),
new LocationTagged<string>("~/Foo/Bar", 14, 0, 14))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href='@foo ~/Foo/Bar' />");
}
[Fact]
public void UnquotedAttributeWithCodeWithSpacesInBlock()
{
ParseBlockTest("<input value=@foo />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<input"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "value", prefix: new LocationTagged<string>(" value=", 6, 0, 6), suffix: new LocationTagged<string>(string.Empty, 17, 0, 17)),
Factory.Markup(" value=").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 13, 0, 13), 13, 0, 13),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)))),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<input value=@foo />");
}
[Fact]
public void UnquotedAttributeWithCodeWithSpacesInDocument()
{
ParseDocumentTest("<input value=@foo />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<input"),
new MarkupBlock(new AttributeBlockChunkGenerator(name: "value", prefix: new LocationTagged<string>(" value=", 6, 0, 6), suffix: new LocationTagged<string>(string.Empty, 17, 0, 17)),
Factory.Markup(" value=").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 13, 0, 13), 13, 0, 13),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)))),
Factory.Markup(" />"))));
ParseDocumentTest("<input value=@foo />");
}
[Fact]
@ -473,18 +233,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var rewritten = attributeCollapser.Rewrite(results.Root);
// Assert
EvaluateParseTree(rewritten,
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<span"),
new MarkupBlock(
new AttributeBlockChunkGenerator("foo", new LocationTagged<string>(" foo='", 5, 0, 5), new LocationTagged<string>("'", 13, 0, 13)),
Factory.Markup(" foo='").With(SpanChunkGenerator.Null),
new MarkupBlock(
Factory.Markup("@").With(new LiteralAttributeChunkGenerator(new LocationTagged<string>(string.Empty, 11, 0, 11), new LocationTagged<string>("@", 11, 0, 11))).Accepts(AcceptedCharactersInternal.None),
Factory.Markup("@").With(SpanChunkGenerator.Null).Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(" />"))));
BaselineTest(rewritten);
}
[Fact]
@ -564,144 +313,31 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseBlockTest(
RazorLanguageVersion.Experimental,
"<span data-foo='@foo'></span>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<span"),
new MarkupBlock(
new AttributeBlockChunkGenerator("data-foo", new LocationTagged<string>(" data-foo='", 5, 0, 5), new LocationTagged<string>("'", 20, 0, 20)),
Factory.Markup(" data-foo='").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 16, 0, 16), 16, 0, 16),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup("'").With(SpanChunkGenerator.Null)),
Factory.Markup(">").Accepts(AcceptedCharactersInternal.None)),
new MarkupTagBlock(
Factory.Markup("</span>").Accepts(AcceptedCharactersInternal.None))));
"<span data-foo='@foo'></span>");
}
[Fact]
public void ConditionalAttributesAreDisabledForDataAttributesInBlock()
{
ParseBlockTest("<span data-foo='@foo'></span>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<span"),
new MarkupBlock(
Factory.Markup(" data-foo='"),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup("'")),
Factory.Markup(">").Accepts(AcceptedCharactersInternal.None)),
new MarkupTagBlock(
Factory.Markup("</span>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<span data-foo='@foo'></span>");
}
[Fact]
public void ConditionalAttributesWithWeirdSpacingAreDisabledForDataAttributesInBlock()
{
ParseBlockTest("<span data-foo = '@foo'></span>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<span"),
new MarkupBlock(
Factory.Markup(" data-foo = '"),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup("'")),
Factory.Markup(">").Accepts(AcceptedCharactersInternal.None)),
new MarkupTagBlock(
Factory.Markup("</span>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<span data-foo = '@foo'></span>");
}
[Fact]
public void ConditionalAttributesAreDisabledForDataAttributesInDocument()
{
ParseDocumentTest("<span data-foo='@foo'></span>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<span"),
new MarkupBlock(
Factory.Markup(" data-foo='"),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup("'")),
Factory.Markup(">")),
new MarkupTagBlock(
Factory.Markup("</span>"))));
ParseDocumentTest("<span data-foo='@foo'></span>");
}
[Fact]
public void ConditionalAttributesWithWeirdSpacingAreDisabledForDataAttributesInDocument()
{
ParseDocumentTest("<span data-foo=@foo ></span>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<span"),
new MarkupBlock(
Factory.Markup(" data-foo="),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup(" >")),
new MarkupTagBlock(
Factory.Markup("</span>"))));
}
private class EmptyTestDocument : ITextDocument
{
public int Length
{
get
{
throw new NotImplementedException();
}
}
public SourceLocation Location
{
get
{
throw new NotImplementedException();
}
}
public int Position
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public int Peek()
{
throw new NotImplementedException();
}
public int Read()
{
throw new NotImplementedException();
}
ParseDocumentTest("<span data-foo=@foo ></span>");
}
}
}

View File

@ -0,0 +1,22 @@
Markup block - Gen<None> - 17 - (0:0,0)
Tag block - Gen<None> - 17 - (0:0,0)
Markup span - Gen<Markup> - [<span] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[span];
Markup block - Gen<Attr:foo, foo='@(5:0,5),'@(13:0,13)> - 9 - (5:0,5)
Markup span - Gen<None> - [ foo='] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<None> - 2 - (11:0,11)
Markup span - Gen<LitAttr:@(11:0,11)> - [@] - SpanEditHandler;Accepts:None - (11:0,11) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (12:0,12) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,26 @@
Markup block - Gen<None> - 29 - (0:0,0)
Tag block - Gen<None> - 22 - (0:0,0)
Markup span - Gen<Markup> - [<span] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[span];
Markup block - Gen<None> - 16 - (5:0,5)
Markup span - Gen<Markup> - [ data-foo='] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[data-foo];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Expression block - Gen<Expr> - 4 - (16:0,16)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (17:0,17) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<Markup> - ['] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [>] - SpanEditHandler;Accepts:None - (21:0,21) - Symbols:1
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 7 - (22:0,22)
Markup span - Gen<Markup> - [</span>] - SpanEditHandler;Accepts:None - (22:0,22) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[span];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,26 @@
Markup block - Gen<None> - 29 - (0:0,0)
Tag block - Gen<None> - 22 - (0:0,0)
Markup span - Gen<Markup> - [<span] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[span];
Markup block - Gen<None> - 16 - (5:0,5)
Markup span - Gen<Markup> - [ data-foo='] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[data-foo];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Expression block - Gen<Expr> - 4 - (16:0,16)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (17:0,17) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<Markup> - ['] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [>] - SpanEditHandler;Accepts:Any - (21:0,21) - Symbols:1
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 7 - (22:0,22)
Markup span - Gen<Markup> - [</span>] - SpanEditHandler;Accepts:Any - (22:0,22) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[span];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,27 @@
Markup block - Gen<None> - 29 - (0:0,0)
Tag block - Gen<None> - 22 - (0:0,0)
Markup span - Gen<Markup> - [<span] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[span];
Markup block - Gen<Attr:data-foo, data-foo='@(5:0,5),'@(20:0,20)> - 16 - (5:0,5)
Markup span - Gen<None> - [ data-foo='] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[data-foo];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<DynAttr:@(16:0,16)> - 4 - (16:0,16)
Expression block - Gen<Expr> - 4 - (16:0,16)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (17:0,17) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [>] - SpanEditHandler;Accepts:None - (21:0,21) - Symbols:1
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 7 - (22:0,22)
Markup span - Gen<Markup> - [</span>] - SpanEditHandler;Accepts:None - (22:0,22) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[span];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,28 @@
Markup block - Gen<None> - 33 - (0:0,0)
Tag block - Gen<None> - 26 - (0:0,0)
Markup span - Gen<Markup> - [<span] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[span];
Markup block - Gen<None> - 20 - (5:0,5)
Markup span - Gen<Markup> - [ data-foo = '] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[data-foo];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.SingleQuote;['];
Expression block - Gen<Expr> - 4 - (20:0,20)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (20:0,20) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (21:0,21) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<Markup> - ['] - SpanEditHandler;Accepts:Any - (24:0,24) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [>] - SpanEditHandler;Accepts:None - (25:0,25) - Symbols:1
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 7 - (26:0,26)
Markup span - Gen<Markup> - [</span>] - SpanEditHandler;Accepts:None - (26:0,26) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[span];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,24 @@
Markup block - Gen<None> - 28 - (0:0,0)
Tag block - Gen<None> - 21 - (0:0,0)
Markup span - Gen<Markup> - [<span] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[span];
Markup block - Gen<None> - 14 - (5:0,5)
Markup span - Gen<Markup> - [ data-foo=] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[data-foo];
HtmlSymbolType.Equals;[=];
Expression block - Gen<Expr> - 4 - (15:0,15)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (15:0,15) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (16:0,16) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<Markup> - [ >] - SpanEditHandler;Accepts:Any - (19:0,19) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 7 - (21:0,21)
Markup span - Gen<Markup> - [</span>] - SpanEditHandler;Accepts:Any - (21:0,21) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[span];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,25 @@
Markup block - Gen<None> - 24 - (0:0,0)
Tag block - Gen<None> - 24 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href="@(2:0,2),"@(20:0,20)> - 19 - (2:0,2)
Markup span - Gen<None> - [ href="] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.DoubleQuote;["];
Markup span - Gen<LitAttr:@(9:0,9)> - [Foo] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<LitAttr: @(12:0,12)> - [ Bar] - SpanEditHandler;Accepts:Any - (12:0,12) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[Bar];
Markup span - Gen<LitAttr: @(16:0,16)> - [ Baz] - SpanEditHandler;Accepts:Any - (16:0,16) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[Baz];
Markup span - Gen<None> - ["] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
HtmlSymbolType.DoubleQuote;["];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (21:0,21) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,27 @@
Markup block - Gen<None> - 23 - (0:0,0)
Tag block - Gen<None> - 23 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href LF= LF'@(2:0,2),'@(19:2,5)> - 18 - (2:0,2)
Markup span - Gen<None> - [ href LF= LF'] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:8
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<DynAttr:@(15:2,1)> - 4 - (15:2,1)
Expression block - Gen<Expr> - 4 - (15:2,1)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (15:2,1) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [Foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (16:2,2) - Symbols:1
CSharpSymbolType.Identifier;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (19:2,5) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (20:2,6) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,25 @@
Markup block - Gen<None> - 24 - (0:0,0)
Tag block - Gen<None> - 24 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href='@(2:0,2),'@(20:0,20)> - 19 - (2:0,2)
Markup span - Gen<None> - [ href='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(9:0,9)> - [Foo] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<LitAttr: @(12:0,12)> - [ Bar] - SpanEditHandler;Accepts:Any - (12:0,12) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[Bar];
Markup span - Gen<LitAttr: @(16:0,16)> - [ Baz] - SpanEditHandler;Accepts:Any - (16:0,16) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[Baz];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (21:0,21) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,34 @@
Markup block - Gen<None> - 26 - (0:0,0)
Tag block - Gen<None> - 26 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href='@(2:0,2),'@(22:0,22)> - 21 - (2:0,2)
Markup span - Gen<None> - [ href='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<DynAttr:@(9:0,9)> - 4 - (9:0,9)
Expression block - Gen<Expr> - 4 - (9:0,9)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (9:0,9) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (10:0,10) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<LitAttr: @(13:0,13)> - [ bar] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[bar];
Markup block - Gen<DynAttr: @(17:0,17)> - 5 - (17:0,17)
Markup span - Gen<None> - [ ] - SpanEditHandler;Accepts:Any - (17:0,17) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 4 - (18:0,18)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (18:0,18) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [baz] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (19:0,19) - Symbols:1
CSharpSymbolType.Identifier;[baz];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (22:0,22) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (23:0,23) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,29 @@
Markup block - Gen<None> - 29 - (0:0,0)
Tag block - Gen<None> - 29 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href,LFhref='@(2:0,2),'@(13:1,9)> - 12 - (2:0,2)
Markup span - Gen<None> - [LFhref='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(10:1,6)> - [Foo] - SpanEditHandler;Accepts:Any - (10:1,6) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (13:1,9) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:abcd,LFabcd='@(14:1,10),'@(25:2,9)> - 12 - (14:1,10)
Markup span - Gen<None> - [LFabcd='] - SpanEditHandler;Accepts:Any - (14:1,10) - Symbols:4
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[abcd];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(22:2,6)> - [Bar] - SpanEditHandler;Accepts:Any - (22:2,6) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (25:2,9) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (26:2,10) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,19 @@
Markup block - Gen<None> - 17 - (0:0,0)
Tag block - Gen<None> - 17 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href,LFhref='@(2:0,2),'@(13:1,9)> - 12 - (2:0,2)
Markup span - Gen<None> - [LFhref='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(10:1,6)> - [Foo] - SpanEditHandler;Accepts:Any - (10:1,6) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (13:1,9) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (14:1,10) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,23 @@
Markup block - Gen<None> - 17 - (0:0,0)
Tag block - Gen<None> - 17 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href='@(2:0,2),'@(13:0,13)> - 12 - (2:0,2)
Markup span - Gen<None> - [ href='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<DynAttr:@(9:0,9)> - 4 - (9:0,9)
Expression block - Gen<Expr> - 4 - (9:0,9)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (9:0,9) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (10:0,10) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (14:0,14) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,19 @@
Markup block - Gen<None> - 16 - (0:0,0)
Tag block - Gen<None> - 16 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href='@(2:0,2),'@(12:0,12)> - 11 - (2:0,2)
Markup span - Gen<None> - [ href='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(9:0,9)> - [Foo] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (12:0,12) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,23 @@
Markup block - Gen<None> - 24 - (0:0,0)
Tag block - Gen<None> - 24 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href LF= LF'@(2:0,2),'@(20:2,4)> - 19 - (2:0,2)
Markup span - Gen<None> - [ href LF= LF'] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:8
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(17:2,1)> - [Foo] - SpanEditHandler;Accepts:Any - (17:2,1) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (20:2,4) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (21:2,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,21 @@
Markup block - Gen<None> - 18 - (0:0,0)
Tag block - Gen<None> - 18 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:[item], [item]='@(2:0,2),'@(14:0,14)> - 13 - (2:0,2)
Markup span - Gen<None> - [ [item]='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[item];
HtmlSymbolType.RightBracket;[]];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(11:0,11)> - [Foo] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (15:0,15) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,20 @@
Markup block - Gen<None> - 19 - (0:0,0)
Tag block - Gen<None> - 19 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:[(item,, [(item,='@(2:0,2),'@(15:0,15)> - 14 - (2:0,2)
Markup span - Gen<None> - [ [(item,='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[(item,];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(12:0,12)> - [Foo] - SpanEditHandler;Accepts:Any - (12:0,12) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,19 @@
Markup block - Gen<None> - 19 - (0:0,0)
Tag block - Gen<None> - 19 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:(click), (click)='@(2:0,2),'@(15:0,15)> - 14 - (2:0,2)
Markup span - Gen<None> - [ (click)='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(12:0,12)> - [Foo] - SpanEditHandler;Accepts:Any - (12:0,12) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,19 @@
Markup block - Gen<None> - 20 - (0:0,0)
Tag block - Gen<None> - 20 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:(^click), (^click)='@(2:0,2),'@(16:0,16)> - 15 - (2:0,2)
Markup span - Gen<None> - [ (^click)='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(^click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(13:0,13)> - [Foo] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (16:0,16) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (17:0,17) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,19 @@
Markup block - Gen<None> - 22 - (0:0,0)
Tag block - Gen<None> - 22 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:*something, *something='@(2:0,2),'@(18:0,18)> - 17 - (2:0,2)
Markup span - Gen<None> - [ *something='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[*something];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(15:0,15)> - [Foo] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (18:0,18) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (19:0,19) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,19 @@
Markup block - Gen<None> - 18 - (0:0,0)
Tag block - Gen<None> - 18 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:#local, #local='@(2:0,2),'@(14:0,14)> - 13 - (2:0,2)
Markup span - Gen<None> - [ #local='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[#local];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(11:0,11)> - [Foo] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (15:0,15) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,35 @@
Markup block - Gen<None> - 35 - (0:0,0)
Tag block - Gen<None> - 35 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:[item], [item]LF='@(2:0,2),'@(16:1,5)> - 15 - (2:0,2)
Markup span - Gen<None> - [ [item]LF='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:7
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[item];
HtmlSymbolType.RightBracket;[]];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(13:1,2)> - [Foo] - SpanEditHandler;Accepts:Any - (13:1,2) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (16:1,5) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:[item], [item]=LF'@(17:1,6),'@(31:2,4)> - 15 - (17:1,6)
Markup span - Gen<None> - [ [item]=LF'] - SpanEditHandler;Accepts:Any - (17:1,6) - Symbols:7
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[item];
HtmlSymbolType.RightBracket;[]];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(28:2,1)> - [Bar] - SpanEditHandler;Accepts:Any - (28:2,1) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (31:2,4) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (32:2,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,33 @@
Markup block - Gen<None> - 37 - (0:0,0)
Tag block - Gen<None> - 37 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:[(item,, [(item,LF='@(2:0,2),'@(17:1,5)> - 16 - (2:0,2)
Markup span - Gen<None> - [ [(item,LF='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[(item,];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(14:1,2)> - [Foo] - SpanEditHandler;Accepts:Any - (14:1,2) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (17:1,5) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:[(item,, [(item,=LF'@(18:1,6),'@(33:2,4)> - 16 - (18:1,6)
Markup span - Gen<None> - [ [(item,=LF'] - SpanEditHandler;Accepts:Any - (18:1,6) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[(item,];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(30:2,1)> - [Bar] - SpanEditHandler;Accepts:Any - (30:2,1) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (33:2,4) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (34:2,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,31 @@
Markup block - Gen<None> - 37 - (0:0,0)
Tag block - Gen<None> - 37 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:(click), (click)LF='@(2:0,2),'@(17:1,5)> - 16 - (2:0,2)
Markup span - Gen<None> - [ (click)LF='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(click)];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(14:1,2)> - [Foo] - SpanEditHandler;Accepts:Any - (14:1,2) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (17:1,5) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:(click), (click)=LF'@(18:1,6),'@(33:2,4)> - 16 - (18:1,6)
Markup span - Gen<None> - [ (click)=LF'] - SpanEditHandler;Accepts:Any - (18:1,6) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(30:2,1)> - [Bar] - SpanEditHandler;Accepts:Any - (30:2,1) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (33:2,4) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (34:2,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,31 @@
Markup block - Gen<None> - 39 - (0:0,0)
Tag block - Gen<None> - 39 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:(^click), (^click)LF='@(2:0,2),'@(18:1,5)> - 17 - (2:0,2)
Markup span - Gen<None> - [ (^click)LF='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(^click)];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(15:1,2)> - [Foo] - SpanEditHandler;Accepts:Any - (15:1,2) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (18:1,5) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:(^click), (^click)=LF'@(19:1,6),'@(35:2,4)> - 17 - (19:1,6)
Markup span - Gen<None> - [ (^click)=LF'] - SpanEditHandler;Accepts:Any - (19:1,6) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(^click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(32:2,1)> - [Bar] - SpanEditHandler;Accepts:Any - (32:2,1) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (35:2,4) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (36:2,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,31 @@
Markup block - Gen<None> - 43 - (0:0,0)
Tag block - Gen<None> - 43 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:*something, *somethingLF='@(2:0,2),'@(20:1,5)> - 19 - (2:0,2)
Markup span - Gen<None> - [ *somethingLF='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[*something];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(17:1,2)> - [Foo] - SpanEditHandler;Accepts:Any - (17:1,2) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (20:1,5) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:*something, *something=LF'@(21:1,6),'@(39:2,4)> - 19 - (21:1,6)
Markup span - Gen<None> - [ *something=LF'] - SpanEditHandler;Accepts:Any - (21:1,6) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[*something];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(36:2,1)> - [Bar] - SpanEditHandler;Accepts:Any - (36:2,1) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (39:2,4) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (40:2,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,31 @@
Markup block - Gen<None> - 35 - (0:0,0)
Tag block - Gen<None> - 35 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:#local, #localLF='@(2:0,2),'@(16:1,5)> - 15 - (2:0,2)
Markup span - Gen<None> - [ #localLF='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[#local];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(13:1,2)> - [Foo] - SpanEditHandler;Accepts:Any - (13:1,2) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (16:1,5) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:#local, #local=LF'@(17:1,6),'@(31:2,4)> - 15 - (17:1,6)
Markup span - Gen<None> - [ #local=LF'] - SpanEditHandler;Accepts:Any - (17:1,6) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[#local];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(28:2,1)> - [Bar] - SpanEditHandler;Accepts:Any - (28:2,1) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (31:2,4) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (32:2,5) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,36 @@
Markup block - Gen<None> - 37 - (0:0,0)
Tag block - Gen<None> - 37 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:[item], LF [item]='@(2:0,2),'@(18:1,13)> - 17 - (2:0,2)
Markup span - Gen<None> - [ LF [item]='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:8
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[item];
HtmlSymbolType.RightBracket;[]];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(15:1,10)> - [Foo] - SpanEditHandler;Accepts:Any - (15:1,10) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (18:1,13) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:[item], LF[item]='@(19:1,14),'@(33:2,11)> - 15 - (19:1,14)
Markup span - Gen<None> - [ LF[item]='] - SpanEditHandler;Accepts:Any - (19:1,14) - Symbols:7
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[item];
HtmlSymbolType.RightBracket;[]];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(30:2,8)> - [Bar] - SpanEditHandler;Accepts:Any - (30:2,8) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (33:2,11) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (34:2,12) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,34 @@
Markup block - Gen<None> - 39 - (0:0,0)
Tag block - Gen<None> - 39 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:[(item,, LF [(item,='@(2:0,2),'@(19:1,14)> - 18 - (2:0,2)
Markup span - Gen<None> - [ LF [(item,='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:7
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[(item,];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(16:1,11)> - [Foo] - SpanEditHandler;Accepts:Any - (16:1,11) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (19:1,14) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:[(item,, LF[(item,='@(20:1,15),'@(35:2,12)> - 16 - (20:1,15)
Markup span - Gen<None> - [ LF[(item,='] - SpanEditHandler;Accepts:Any - (20:1,15) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[(item,];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(32:2,9)> - [Bar] - SpanEditHandler;Accepts:Any - (32:2,9) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (35:2,12) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (36:2,13) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,32 @@
Markup block - Gen<None> - 39 - (0:0,0)
Tag block - Gen<None> - 39 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:(click), LF (click)='@(2:0,2),'@(19:1,14)> - 18 - (2:0,2)
Markup span - Gen<None> - [ LF (click)='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(16:1,11)> - [Foo] - SpanEditHandler;Accepts:Any - (16:1,11) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (19:1,14) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:(click), LF(click)='@(20:1,15),'@(35:2,12)> - 16 - (20:1,15)
Markup span - Gen<None> - [ LF(click)='] - SpanEditHandler;Accepts:Any - (20:1,15) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[(click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(32:2,9)> - [Bar] - SpanEditHandler;Accepts:Any - (32:2,9) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (35:2,12) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (36:2,13) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,32 @@
Markup block - Gen<None> - 41 - (0:0,0)
Tag block - Gen<None> - 41 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:(^click), LF (^click)='@(2:0,2),'@(20:1,15)> - 19 - (2:0,2)
Markup span - Gen<None> - [ LF (^click)='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[(^click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(17:1,12)> - [Foo] - SpanEditHandler;Accepts:Any - (17:1,12) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (20:1,15) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:(^click), LF(^click)='@(21:1,16),'@(37:2,13)> - 17 - (21:1,16)
Markup span - Gen<None> - [ LF(^click)='] - SpanEditHandler;Accepts:Any - (21:1,16) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[(^click)];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(34:2,10)> - [Bar] - SpanEditHandler;Accepts:Any - (34:2,10) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (37:2,13) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (38:2,14) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,32 @@
Markup block - Gen<None> - 45 - (0:0,0)
Tag block - Gen<None> - 45 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:*something, LF *something='@(2:0,2),'@(22:1,17)> - 21 - (2:0,2)
Markup span - Gen<None> - [ LF *something='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[*something];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(19:1,14)> - [Foo] - SpanEditHandler;Accepts:Any - (19:1,14) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (22:1,17) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:*something, LF*something='@(23:1,18),'@(41:2,15)> - 19 - (23:1,18)
Markup span - Gen<None> - [ LF*something='] - SpanEditHandler;Accepts:Any - (23:1,18) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[*something];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(38:2,12)> - [Bar] - SpanEditHandler;Accepts:Any - (38:2,12) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (41:2,15) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (42:2,16) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,32 @@
Markup block - Gen<None> - 37 - (0:0,0)
Tag block - Gen<None> - 37 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:#local, LF #local='@(2:0,2),'@(18:1,13)> - 17 - (2:0,2)
Markup span - Gen<None> - [ LF #local='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[#local];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(15:1,10)> - [Foo] - SpanEditHandler;Accepts:Any - (15:1,10) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (18:1,13) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<Attr:#local, LF#local='@(19:1,14),'@(33:2,11)> - 15 - (19:1,14)
Markup span - Gen<None> - [ LF#local='] - SpanEditHandler;Accepts:Any - (19:1,14) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[#local];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(30:2,8)> - [Bar] - SpanEditHandler;Accepts:Any - (30:2,8) - Symbols:1
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (33:2,11) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (34:2,12) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,20 @@
Markup block - Gen<None> - 20 - (0:0,0)
Tag block - Gen<None> - 20 - (0:0,0)
Markup span - Gen<Markup> - [<input] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[input];
Markup block - Gen<Attr:value, value=@(6:0,6),@(17:0,17)> - 11 - (6:0,6)
Markup span - Gen<None> - [ value=] - SpanEditHandler;Accepts:Any - (6:0,6) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[value];
HtmlSymbolType.Equals;[=];
Markup block - Gen<DynAttr:@(13:0,13)> - 4 - (13:0,13)
Expression block - Gen<Expr> - 4 - (13:0,13)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (14:0,14) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (17:0,17) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,20 @@
Markup block - Gen<None> - 20 - (0:0,0)
Tag block - Gen<None> - 20 - (0:0,0)
Markup span - Gen<Markup> - [<input] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[input];
Markup block - Gen<Attr:value, value=@(6:0,6),@(17:0,17)> - 11 - (6:0,6)
Markup span - Gen<None> - [ value=] - SpanEditHandler;Accepts:Any - (6:0,6) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[value];
HtmlSymbolType.Equals;[=];
Markup block - Gen<DynAttr:@(13:0,13)> - 4 - (13:0,13)
Expression block - Gen<Expr> - 4 - (13:0,13)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (14:0,14) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:Any - (17:0,17) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,24 @@
Markup block - Gen<None> - 22 - (0:0,0)
Tag block - Gen<None> - 22 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href=@(2:0,2),@(11:0,11)> - 9 - (2:0,2)
Markup span - Gen<None> - [ href=] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
Markup span - Gen<LitAttr:@(8:0,8)> - [Foo] - SpanEditHandler;Accepts:Any - (8:0,8) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup block - Gen<None> - 4 - (11:0,11)
Markup span - Gen<Markup> - [ Bar] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[Bar];
Markup block - Gen<None> - 4 - (15:0,15)
Markup span - Gen<Markup> - [ Baz] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:2
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[Baz];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (19:0,19) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,30 @@
Markup block - Gen<None> - 27 - (0:0,0)
Tag block - Gen<None> - 27 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, href='@(2:0,2),'@(23:0,23)> - 22 - (2:0,2)
Markup span - Gen<None> - [ href='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup block - Gen<DynAttr:@(9:0,9)> - 4 - (9:0,9)
Expression block - Gen<Expr> - 4 - (9:0,9)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (9:0,9) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (10:0,10) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<LitAttr: @(13:0,13)> - [ ~/Foo/Bar] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:6
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[~];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[Foo];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[Bar];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (23:0,23) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (24:0,24) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,20 @@
Markup block - Gen<None> - 19 - (0:0,0)
Tag block - Gen<None> - 19 - (0:0,0)
Markup span - Gen<Markup> - [<a] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[a];
Markup block - Gen<Attr:href, LFhref='@(2:0,2),'@(15:1,9)> - 14 - (2:0,2)
Markup span - Gen<None> - [ LFhref='] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.Text;[href];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<LitAttr:@(12:1,6)> - [Foo] - SpanEditHandler;Accepts:Any - (12:1,6) - Symbols:1
HtmlSymbolType.Text;[Foo];
Markup span - Gen<None> - ['] - SpanEditHandler;Accepts:Any - (15:1,9) - Symbols:1
HtmlSymbolType.SingleQuote;['];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (16:1,10) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -95,6 +95,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
}
internal void AssertSyntaxTreeNodeMatchesBaseline(RazorSyntaxTree syntaxTree)
{
AssertSyntaxTreeNodeMatchesBaseline(syntaxTree.Root, syntaxTree.Diagnostics.ToArray());
}
internal void AssertSyntaxTreeNodeMatchesBaseline(Block root, params RazorDiagnostic[] diagnostics)
{
if (FileName == null)
{
@ -105,8 +110,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
var baselineFileName = Path.ChangeExtension(FileName, ".syntaxtree.txt");
var baselineDiagnosticsFileName = Path.ChangeExtension(FileName, ".diagnostics.txt");
var root = syntaxTree.Root;
var diagnostics = syntaxTree.Diagnostics;
if (GenerateBaselines)
{
var baselineFullPath = Path.Combine(TestProjectRoot, baselineFileName);
@ -159,6 +162,18 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
return Regex.Replace(content, "(?<!\r)\n", "\r\n", RegexOptions.None, TimeSpan.FromSeconds(10));
}
internal virtual void BaselineTest(RazorSyntaxTree syntaxTree)
{
SyntaxTreeVerifier.Verify(syntaxTree);
AssertSyntaxTreeNodeMatchesBaseline(syntaxTree);
}
internal virtual void BaselineTest(Block root)
{
SyntaxTreeVerifier.Verify(root);
AssertSyntaxTreeNodeMatchesBaseline(root);
}
internal RazorSyntaxTree ParseBlock(string document, bool designTime)
{
return ParseBlock(RazorLanguageVersion.Latest, document, designTime);
@ -307,6 +322,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
ParseBlockTest(document, null, designTime, expectedErrors);
}
internal virtual void ParseBlockTest(RazorLanguageVersion version, string document)
{
ParseBlockTest(version, document, expectedRoot: null);
}
internal virtual void ParseBlockTest(RazorLanguageVersion version, string document, Block expectedRoot)
{
ParseBlockTest(version, document, expectedRoot, false, null);
@ -358,8 +378,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
if (UseBaselineTests && !IsTheory)
{
SyntaxTreeVerifier.Verify(result);
AssertSyntaxTreeNodeMatchesBaseline(result);
BaselineTest(result);
return;
}
@ -416,7 +435,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
if (UseBaselineTests && !IsTheory)
{
AssertSyntaxTreeNodeMatchesBaseline(result);
BaselineTest(result);
return;
}
@ -487,8 +506,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
if (UseBaselineTests && !IsTheory)
{
SyntaxTreeVerifier.Verify(result);
AssertSyntaxTreeNodeMatchesBaseline(result);
BaselineTest(result);
return;
}