Convert HtmlToCodeSwitchTest

This commit is contained in:
Ryan Nowak 2018-06-28 12:30:02 -07:00
parent 42e8f4abc8
commit 942d4d194c
23 changed files with 761 additions and 351 deletions

View File

@ -1,43 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
internal class HtmlParserTestUtils
{
public static void RunSingleAtEscapeTest(Action<string, Block> testMethod, AcceptedCharactersInternal lastSpanAcceptedCharacters = AcceptedCharactersInternal.None)
{
var factory = new SpanFactory();
testMethod("<foo>@@bar</foo>",
new MarkupBlock(
new MarkupTagBlock(
factory.Markup("<foo>").Accepts(lastSpanAcceptedCharacters)),
factory.Markup("@").Hidden(),
factory.Markup("@bar"),
new MarkupTagBlock(
factory.Markup("</foo>").Accepts(lastSpanAcceptedCharacters))));
}
public static void RunMultiAtEscapeTest(Action<string, Block> testMethod, AcceptedCharactersInternal lastSpanAcceptedCharacters = AcceptedCharactersInternal.None)
{
var factory = new SpanFactory();
testMethod("<foo>@@@@@bar</foo>",
new MarkupBlock(
new MarkupTagBlock(
factory.Markup("<foo>").Accepts(lastSpanAcceptedCharacters)),
factory.Markup("@").Hidden(),
factory.Markup("@"),
factory.Markup("@").Hidden(),
factory.Markup("@"),
new ExpressionBlock(
factory.CodeTransition(),
factory.Code("bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
factory.Markup("</foo>").Accepts(lastSpanAcceptedCharacters))));
}
}
}

View File

@ -10,80 +10,33 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
public class HtmlToCodeSwitchTest : CsHtmlMarkupParserTestBase
{
public HtmlToCodeSwitchTest()
{
UseBaselineTests = true;
}
[Fact]
public void ParseBlockSwitchesWhenCharacterBeforeSwapIsNonAlphanumeric()
{
ParseBlockTest("<p>foo#@i</p>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("foo#"),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("i").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<p>foo#@i</p>");
}
[Fact]
public void ParseBlockSwitchesToCodeWhenSwapCharacterEncounteredMidTag()
{
ParseBlockTest("<foo @bar />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo @bar />");
}
[Fact]
public void ParseBlockSwitchesToCodeWhenSwapCharacterEncounteredInAttributeValue()
{
ParseBlockTest("<foo bar=\"@baz\" />",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo"),
new MarkupBlock(new AttributeBlockChunkGenerator("bar", new LocationTagged<string>(" bar=\"", 4, 0, 4), new LocationTagged<string>("\"", 14, 0, 14)),
Factory.Markup(" bar=\"").With(SpanChunkGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockChunkGenerator(new LocationTagged<string>(string.Empty, 10, 0, 10), 10, 0, 10),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("baz")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace))),
Factory.Markup("\"").With(SpanChunkGenerator.Null)),
Factory.Markup(" />").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo bar=\"@baz\" />");
}
[Fact]
public void ParseBlockSwitchesToCodeWhenSwapCharacterEncounteredInTagContent()
{
ParseBlockTest("<foo>@bar<baz>@boz</baz></foo>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharactersInternal.None)),
Factory.EmptyHtml(),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("<baz>").Accepts(AcceptedCharactersInternal.None)),
Factory.EmptyHtml(),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("boz")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("</baz>").Accepts(AcceptedCharactersInternal.None)),
new MarkupTagBlock(
Factory.Markup("</foo>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo>@bar<baz>@boz</baz></foo>");
}
[Fact]
@ -91,121 +44,43 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
// TODO: Fix at a later date, HTML should be a tag block: https://github.com/aspnet/Razor/issues/101
ParseBlockTest("@:<li>Foo @Bar Baz" + Environment.NewLine
+ "bork",
new MarkupBlock(
Factory.MarkupTransition(),
Factory.MetaMarkup(":", HtmlSymbolType.Colon),
Factory.Markup("<li>Foo ").With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString)),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("Bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup(" Baz" + Environment.NewLine)
.Accepts(AcceptedCharactersInternal.None)));
+ "bork");
}
[Fact]
public void ParseBlockSupportsCodeWithinComment()
{
ParseBlockTest("<foo><!-- @foo --></foo>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharactersInternal.None)),
BlockFactory.HtmlCommentBlock(Factory, f => new SyntaxTreeNode[] {
f.Markup(" ").Accepts(AcceptedCharactersInternal.WhiteSpace),
new ExpressionBlock(
f.CodeTransition(),
f.Code("foo")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
f.Markup(" ").Accepts(AcceptedCharactersInternal.WhiteSpace) }),
new MarkupTagBlock(
Factory.Markup("</foo>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo><!-- @foo --></foo>");
}
[Fact]
public void ParseBlockSupportsCodeWithinSGMLDeclaration()
{
ParseBlockTest("<foo><!DOCTYPE foo @bar baz></foo>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("<!DOCTYPE foo "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup(" baz>").Accepts(AcceptedCharactersInternal.None),
new MarkupTagBlock(
Factory.Markup("</foo>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo><!DOCTYPE foo @bar baz></foo>");
}
[Fact]
public void ParseBlockSupportsCodeWithinCDataDeclaration()
{
ParseBlockTest("<foo><![CDATA[ foo @bar baz]]></foo>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("<![CDATA[ foo "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup(" baz]]>").Accepts(AcceptedCharactersInternal.None),
new MarkupTagBlock(
Factory.Markup("</foo>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo><![CDATA[ foo @bar baz]]></foo>");
}
[Fact]
public void ParseBlockSupportsCodeWithinXMLProcessingInstruction()
{
ParseBlockTest("<foo><?xml foo @bar baz?></foo>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("<?xml foo "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
Factory.Markup(" baz?>").Accepts(AcceptedCharactersInternal.None),
new MarkupTagBlock(
Factory.Markup("</foo>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo><?xml foo @bar baz?></foo>");
}
[Fact]
public void ParseBlockDoesNotSwitchToCodeOnEmailAddressInText()
{
ParseBlockTest("<foo>anurse@microsoft.com</foo>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("anurse@microsoft.com"),
new MarkupTagBlock(
Factory.Markup("</foo>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<foo>anurse@microsoft.com</foo>");
}
[Fact]
public void ParseBlockDoesNotSwitchToCodeOnEmailAddressInAttribute()
{
ParseBlockTest("<a href=\"mailto:anurse@microsoft.com\">Email me</a>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockChunkGenerator("href", new LocationTagged<string>(" href=\"", 2, 0, 2), new LocationTagged<string>("\"", 36, 0, 36)),
Factory.Markup(" href=\"").With(SpanChunkGenerator.Null),
Factory.Markup("mailto:anurse@microsoft.com")
.With(new LiteralAttributeChunkGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), new LocationTagged<string>("mailto:anurse@microsoft.com", 9, 0, 9))),
Factory.Markup("\"").With(SpanChunkGenerator.Null)),
Factory.Markup(">").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("Email me"),
new MarkupTagBlock(
Factory.Markup("</a>").Accepts(AcceptedCharactersInternal.None))));
ParseBlockTest("<a href=\"mailto:anurse@microsoft.com\">Email me</a>");
}
[Fact]
@ -215,33 +90,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " @foreach(var p in Products) {" + Environment.NewLine
+ " <li>Product: @p.Name</li>" + Environment.NewLine
+ " }" + Environment.NewLine
+ " </ul>",
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<ul>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(Environment.NewLine),
new StatementBlock(
Factory.Code(" ").AsStatement(),
Factory.CodeTransition(),
Factory.Code("foreach(var p in Products) {" + Environment.NewLine).AsStatement(),
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<li>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("Product: "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("p.Name")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("</li>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)),
Factory.Code(" }" + Environment.NewLine).AsStatement().Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("</ul>").Accepts(AcceptedCharactersInternal.None))));
+ " </ul>");
}
[Fact]
@ -251,33 +100,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " @foreach(var p in Products) {" + Environment.NewLine
+ " <li>Product: @p.Name</li>" + Environment.NewLine
+ " }" + Environment.NewLine
+ " </ul>",
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<ul>")),
Factory.Markup(Environment.NewLine),
new StatementBlock(
Factory.Code(" ").AsStatement(),
Factory.CodeTransition(),
Factory.Code("foreach(var p in Products) {" + Environment.NewLine).AsStatement(),
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<li>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("Product: "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("p.Name")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("</li>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)),
Factory.Code(" }" + Environment.NewLine).AsStatement().Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("</ul>"))));
+ " </ul>");
}
[Fact]
@ -291,45 +114,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " }" + Environment.NewLine
+ " </ul>" + Environment.NewLine
+ "}",
new[] { SectionDirective.Directive, },
new MarkupBlock(
Factory.EmptyHtml(),
new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
Factory.CodeTransition(),
Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Code, "foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
new MarkupBlock(
Factory.Markup(Environment.NewLine + " "),
new MarkupTagBlock(
Factory.Markup("<ul>")),
Factory.Markup(Environment.NewLine),
new StatementBlock(
Factory.Code(" ").AsStatement(),
Factory.CodeTransition(),
Factory.Code("foreach(var p in Products) {" + Environment.NewLine).AsStatement(),
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<li>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("Product: "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("p.Name")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("</li>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)),
Factory.Code(" }" + Environment.NewLine).AsStatement().Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("</ul>")),
Factory.Markup(Environment.NewLine)),
Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
Factory.EmptyHtml()));
new[] { SectionDirective.Directive, });
}
[Fact]
@ -340,27 +125,6 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " <li>Product: @p.Name</li>" + Environment.NewLine
+ " }" + Environment.NewLine
+ " </ul>",
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<ul>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(Environment.NewLine + " "),
new StatementBlock(
Factory.CodeTransition(),
Factory.Code($"foreach(var p in Products) {{{Environment.NewLine} ").AsStatement(),
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<li>").Accepts(AcceptedCharactersInternal.None)),
Factory.Markup("Product: "),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("p.Name").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("</li>").Accepts(AcceptedCharactersInternal.None))),
Factory.Code(Environment.NewLine + " }").AsStatement().Accepts(AcceptedCharactersInternal.None)),
Factory.Markup(Environment.NewLine + " "),
new MarkupTagBlock(
Factory.Markup("</ul>").Accepts(AcceptedCharactersInternal.None))),
designTime: true);
}
@ -368,25 +132,26 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
[Fact]
public void ParseBlockTreatsTwoAtSignsAsEscapeSequence()
{
HtmlParserTestUtils.RunSingleAtEscapeTest(ParseBlockTest);
ParseBlockTest("<foo>@@bar</foo>");
}
[Fact]
public void ParseBlockTreatsPairsOfAtSignsAsEscapeSequence()
{
HtmlParserTestUtils.RunMultiAtEscapeTest(ParseBlockTest);
ParseBlockTest("<foo>@@@@@bar</foo>");
}
[Fact]
public void ParseDocumentTreatsTwoAtSignsAsEscapeSequence()
{
HtmlParserTestUtils.RunSingleAtEscapeTest(ParseDocumentTest, lastSpanAcceptedCharacters: AcceptedCharactersInternal.Any);
ParseDocumentTest("<foo>@@bar</foo>");
}
[Fact]
public void ParseDocumentTreatsPairsOfAtSignsAsEscapeSequence()
{
HtmlParserTestUtils.RunMultiAtEscapeTest(ParseDocumentTest, lastSpanAcceptedCharacters: AcceptedCharactersInternal.Any);
var factory = new SpanFactory();
ParseDocumentTest("<foo>@@@@@bar</foo>");
}
[Fact]
@ -394,27 +159,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseDocumentTest(
"@section Foo { <foo>@@bar</foo> }",
new[] { SectionDirective.Directive, },
new MarkupBlock(
Factory.EmptyHtml(),
new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
Factory.CodeTransition(),
Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Code, "Foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<foo>")),
Factory.Markup("@").Hidden(),
Factory.Markup("@bar"),
new MarkupTagBlock(
Factory.Markup("</foo>")),
Factory.Markup(" ")),
Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
Factory.EmptyHtml()));
new[] { SectionDirective.Directive, });
}
[Fact]
@ -422,34 +167,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseDocumentTest(
"@section Foo { <foo>@@@@@bar</foo> }",
new[] { SectionDirective.Directive, },
new MarkupBlock(
Factory.EmptyHtml(),
new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive),
Factory.CodeTransition(),
Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None),
Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace),
Factory.Span(SpanKindInternal.Code, "Foo", CSharpSymbolType.Identifier).AsDirectiveToken(SectionDirective.Directive.Tokens[0]),
Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace),
Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None),
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<foo>")),
Factory.Markup("@").Hidden(),
Factory.Markup("@"),
Factory.Markup("@").Hidden(),
Factory.Markup("@"),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("bar")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
new MarkupTagBlock(
Factory.Markup("</foo>")),
Factory.Markup(" ")),
Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)),
Factory.EmptyHtml()));
new[] { SectionDirective.Directive, });
}
}
}

View File

@ -0,0 +1,64 @@
Markup block - Gen<None> - 95 - (0:0,0)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 4 - (3:0,3)
Markup span - Gen<Markup> - [<ul>] - SpanEditHandler;Accepts:None - (3:0,3) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF ] - SpanEditHandler;Accepts:Any - (7:0,7) - Symbols:2
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
Statement block - Gen<None> - 71 - (13:1,4)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (13:1,4) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Stmt> - [foreach(var p in Products) {LF ] - SpanEditHandler;Accepts:Any - (14:1,5) - Symbols:14
CSharpSymbolType.Keyword;[foreach];
CSharpSymbolType.LeftParenthesis;[(];
CSharpSymbolType.Identifier;[var];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Keyword;[in];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[Products];
CSharpSymbolType.RightParenthesis;[)];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.LeftBrace;[{];
CSharpSymbolType.NewLine;[LF];
CSharpSymbolType.WhiteSpace;[ ];
Markup block - Gen<None> - 25 - (52:2,8)
Tag block - Gen<None> - 4 - (52:2,8)
Markup span - Gen<Markup> - [<li>] - SpanEditHandler;Accepts:None - (52:2,8) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [Product: ] - SpanEditHandler;Accepts:Any - (56:2,12) - Symbols:2
HtmlSymbolType.Text;[Product:];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 7 - (65:2,21)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (65:2,21) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [p.Name] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (66:2,22) - Symbols:3
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.Dot;[.];
CSharpSymbolType.Identifier;[Name];
Tag block - Gen<None> - 5 - (72:2,28)
Markup span - Gen<Markup> - [</li>] - SpanEditHandler;Accepts:None - (72:2,28) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Code span - Gen<Stmt> - [LF }] - SpanEditHandler;Accepts:None - (77:2,33) - Symbols:3
CSharpSymbolType.NewLine;[LF];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.RightBrace;[}];
Markup span - Gen<Markup> - [LF ] - SpanEditHandler;Accepts:Any - (84:3,5) - Symbols:2
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 5 - (90:4,4)
Markup span - Gen<Markup> - [</ul>] - SpanEditHandler;Accepts:None - (90:4,4) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,27 @@
Markup block - Gen<None> - 50 - (0:0,0)
Tag block - Gen<None> - 38 - (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),"@(36:0,36)> - 35 - (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)> - [mailto:anurse@microsoft.com] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
HtmlSymbolType.Text;[mailto:anurse@microsoft.com];
Markup span - Gen<None> - ["] - SpanEditHandler;Accepts:Any - (36:0,36) - Symbols:1
HtmlSymbolType.DoubleQuote;["];
Markup span - Gen<Markup> - [>] - SpanEditHandler;Accepts:None - (37:0,37) - Symbols:1
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [Email me] - SpanEditHandler;Accepts:Any - (38:0,38) - Symbols:3
HtmlSymbolType.Text;[Email];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[me];
Tag block - Gen<None> - 4 - (46:0,46)
Markup span - Gen<Markup> - [</a>] - SpanEditHandler;Accepts:None - (46:0,46) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[a];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,14 @@
Markup block - Gen<None> - 31 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [anurse@microsoft.com] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:1
HtmlSymbolType.Text;[anurse@microsoft.com];
Tag block - Gen<None> - 6 - (25:0,25)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (25:0,25) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,67 @@
Markup block - Gen<None> - 95 - (0:0,0)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 4 - (3:0,3)
Markup span - Gen<Markup> - [<ul>] - SpanEditHandler;Accepts:None - (3:0,3) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF] - SpanEditHandler;Accepts:Any - (7:0,7) - Symbols:1
HtmlSymbolType.NewLine;[LF];
Statement block - Gen<None> - 77 - (9:1,0)
Code span - Gen<Stmt> - [ ] - SpanEditHandler;Accepts:Any - (9:1,0) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (13:1,4) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Stmt> - [foreach(var p in Products) {LF] - SpanEditHandler;Accepts:Any - (14:1,5) - Symbols:13
CSharpSymbolType.Keyword;[foreach];
CSharpSymbolType.LeftParenthesis;[(];
CSharpSymbolType.Identifier;[var];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Keyword;[in];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[Products];
CSharpSymbolType.RightParenthesis;[)];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.LeftBrace;[{];
CSharpSymbolType.NewLine;[LF];
Markup block - Gen<None> - 35 - (44:2,0)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (44:2,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 4 - (52:2,8)
Markup span - Gen<Markup> - [<li>] - SpanEditHandler;Accepts:None - (52:2,8) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [Product: ] - SpanEditHandler;Accepts:Any - (56:2,12) - Symbols:2
HtmlSymbolType.Text;[Product:];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 7 - (65:2,21)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (65:2,21) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [p.Name] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (66:2,22) - Symbols:3
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.Dot;[.];
CSharpSymbolType.Identifier;[Name];
Tag block - Gen<None> - 5 - (72:2,28)
Markup span - Gen<Markup> - [</li>] - SpanEditHandler;Accepts:None - (72:2,28) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF] - SpanEditHandler;Accepts:None - (77:2,33) - Symbols:1
HtmlSymbolType.NewLine;[LF];
Code span - Gen<Stmt> - [ }LF] - SpanEditHandler;Accepts:None - (79:3,0) - Symbols:3
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.RightBrace;[}];
CSharpSymbolType.NewLine;[LF];
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (86:4,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 5 - (90:4,4)
Markup span - Gen<Markup> - [</ul>] - SpanEditHandler;Accepts:None - (90:4,4) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,20 @@
Markup block - Gen<None> - 20 - (0:0,0)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
HtmlSymbolType.Transition;[@];
MetaCode span - Gen<None> - [:] - SpanEditHandler;Accepts:Any - (1:0,1) - Symbols:1
HtmlSymbolType.Colon;[:];
Markup span - Gen<Markup> - [<li>Foo ] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:5
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
HtmlSymbolType.Text;[Foo];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 4 - (10:0,10)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [Bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (11:0,11) - Symbols:1
CSharpSymbolType.Identifier;[Bar];
Markup span - Gen<Markup> - [ BazLF] - SpanEditHandler;Accepts:None - (14:0,14) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[Baz];
HtmlSymbolType.NewLine;[LF];

View File

@ -0,0 +1,32 @@
Markup block - Gen<None> - 36 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [<![CDATA[ foo ] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:8
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Bang;[!];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.Text;[CDATA];
HtmlSymbolType.LeftBracket;[[];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 4 - (19:0,19)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (19:0,19) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (20:0,20) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Markup span - Gen<Markup> - [ baz]]>] - SpanEditHandler;Accepts:None - (23:0,23) - Symbols:5
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[baz];
HtmlSymbolType.RightBracket;[]];
HtmlSymbolType.RightBracket;[]];
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 6 - (30:0,30)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (30:0,30) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,29 @@
Markup block - Gen<None> - 24 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
HtmlComment block - Gen<None> - 13 - (5:0,5)
Markup span - Gen<Markup> - [<!--] - SpanEditHandler;Accepts:None - (5:0,5) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Bang;[!];
HtmlSymbolType.DoubleHyphen;[--];
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:WhiteSpace - (9:0,9) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 4 - (10:0,10)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [foo] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (11:0,11) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:WhiteSpace - (14:0,14) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Markup span - Gen<Markup> - [-->] - SpanEditHandler;Accepts:None - (15:0,15) - Symbols:2
HtmlSymbolType.DoubleHyphen;[--];
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 6 - (18:0,18)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (18:0,18) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,28 @@
Markup block - Gen<None> - 34 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [<!DOCTYPE foo ] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:6
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Bang;[!];
HtmlSymbolType.Text;[DOCTYPE];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 4 - (19:0,19)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (19:0,19) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (20:0,20) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Markup span - Gen<Markup> - [ baz>] - SpanEditHandler;Accepts:None - (23:0,23) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[baz];
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 6 - (28:0,28)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (28:0,28) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,29 @@
Markup block - Gen<None> - 31 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [<?xml foo ] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:6
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.QuestionMark;[?];
HtmlSymbolType.Text;[xml];
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.WhiteSpace;[ ];
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> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (16:0,16) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Markup span - Gen<Markup> - [ baz?>] - SpanEditHandler;Accepts:None - (19:0,19) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[baz];
HtmlSymbolType.QuestionMark;[?];
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 6 - (25:0,25)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (25:0,25) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,23 @@
Markup block - Gen<None> - 18 - (0:0,0)
Tag block - Gen<None> - 18 - (0:0,0)
Markup span - Gen<Markup> - [<foo] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
Markup block - Gen<Attr:bar, bar="@(4:0,4),"@(14:0,14)> - 11 - (4:0,4)
Markup span - Gen<None> - [ bar="] - SpanEditHandler;Accepts:Any - (4:0,4) - Symbols:4
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.Text;[bar];
HtmlSymbolType.Equals;[=];
HtmlSymbolType.DoubleQuote;["];
Markup block - Gen<DynAttr:@(10:0,10)> - 4 - (10:0,10)
Expression block - Gen<Expr> - 4 - (10:0,10)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [baz] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (11:0,11) - Symbols:1
CSharpSymbolType.Identifier;[baz];
Markup span - Gen<None> - ["] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
HtmlSymbolType.DoubleQuote;["];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (15:0,15) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,37 @@
Markup block - Gen<None> - 30 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:1
HtmlSymbolType.Unknown;[];
Expression block - Gen<Expr> - 4 - (5:0,5)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (5:0,5) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (6:0,6) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Tag block - Gen<None> - 5 - (9:0,9)
Markup span - Gen<Markup> - [<baz>] - SpanEditHandler;Accepts:None - (9:0,9) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[baz];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
HtmlSymbolType.Unknown;[];
Expression block - Gen<Expr> - 4 - (14:0,14)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (14:0,14) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [boz] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (15:0,15) - Symbols:1
CSharpSymbolType.Identifier;[boz];
Tag block - Gen<None> - 6 - (18:0,18)
Markup span - Gen<Markup> - [</baz>] - SpanEditHandler;Accepts:None - (18:0,18) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[baz];
HtmlSymbolType.CloseAngle;[>];
Tag block - Gen<None> - 6 - (24:0,24)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (24:0,24) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,15 @@
Markup block - Gen<None> - 12 - (0:0,0)
Tag block - Gen<None> - 12 - (0:0,0)
Markup span - Gen<Markup> - [<foo ] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 4 - (5:0,5)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (5:0,5) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (6:0,6) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Markup span - Gen<Markup> - [ />] - SpanEditHandler;Accepts:None - (9:0,9) - Symbols:3
HtmlSymbolType.WhiteSpace;[ ];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,19 @@
Markup block - Gen<None> - 13 - (0:0,0)
Tag block - Gen<None> - 3 - (0:0,0)
Markup span - Gen<Markup> - [<p>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[p];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [foo#] - SpanEditHandler;Accepts:Any - (3:0,3) - Symbols:1
HtmlSymbolType.Text;[foo#];
Expression block - Gen<Expr> - 2 - (7:0,7)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (7:0,7) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [i] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (8:0,8) - Symbols:1
CSharpSymbolType.Identifier;[i];
Tag block - Gen<None> - 4 - (9:0,9)
Markup span - Gen<Markup> - [</p>] - SpanEditHandler;Accepts:None - (9:0,9) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[p];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,25 @@
Markup block - Gen<None> - 19 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@] - SpanEditHandler;Accepts:Any - (6:0,6) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (7:0,7) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@] - SpanEditHandler;Accepts:Any - (8:0,8) - Symbols:1
HtmlSymbolType.Transition;[@];
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> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (10:0,10) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Tag block - Gen<None> - 6 - (13:0,13)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,17 @@
Markup block - Gen<None> - 16 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@bar] - SpanEditHandler;Accepts:Any - (6:0,6) - Symbols:2
HtmlSymbolType.Transition;[@];
HtmlSymbolType.Text;[bar];
Tag block - Gen<None> - 6 - (10:0,10)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,67 @@
Markup block - Gen<None> - 95 - (0:0,0)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 4 - (3:0,3)
Markup span - Gen<Markup> - [<ul>] - SpanEditHandler;Accepts:Any - (3:0,3) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF] - SpanEditHandler;Accepts:Any - (7:0,7) - Symbols:1
HtmlSymbolType.NewLine;[LF];
Statement block - Gen<None> - 77 - (9:1,0)
Code span - Gen<Stmt> - [ ] - SpanEditHandler;Accepts:Any - (9:1,0) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (13:1,4) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Stmt> - [foreach(var p in Products) {LF] - SpanEditHandler;Accepts:Any - (14:1,5) - Symbols:13
CSharpSymbolType.Keyword;[foreach];
CSharpSymbolType.LeftParenthesis;[(];
CSharpSymbolType.Identifier;[var];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Keyword;[in];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[Products];
CSharpSymbolType.RightParenthesis;[)];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.LeftBrace;[{];
CSharpSymbolType.NewLine;[LF];
Markup block - Gen<None> - 35 - (44:2,0)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (44:2,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 4 - (52:2,8)
Markup span - Gen<Markup> - [<li>] - SpanEditHandler;Accepts:None - (52:2,8) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [Product: ] - SpanEditHandler;Accepts:Any - (56:2,12) - Symbols:2
HtmlSymbolType.Text;[Product:];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 7 - (65:2,21)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (65:2,21) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [p.Name] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (66:2,22) - Symbols:3
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.Dot;[.];
CSharpSymbolType.Identifier;[Name];
Tag block - Gen<None> - 5 - (72:2,28)
Markup span - Gen<Markup> - [</li>] - SpanEditHandler;Accepts:None - (72:2,28) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF] - SpanEditHandler;Accepts:None - (77:2,33) - Symbols:1
HtmlSymbolType.NewLine;[LF];
Code span - Gen<Stmt> - [ }LF] - SpanEditHandler;Accepts:None - (79:3,0) - Symbols:3
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.RightBrace;[}];
CSharpSymbolType.NewLine;[LF];
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (86:4,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 5 - (90:4,4)
Markup span - Gen<Markup> - [</ul>] - SpanEditHandler;Accepts:Any - (90:4,4) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,25 @@
Markup block - Gen<None> - 19 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@] - SpanEditHandler;Accepts:Any - (6:0,6) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (7:0,7) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@] - SpanEditHandler;Accepts:Any - (8:0,8) - Symbols:1
HtmlSymbolType.Transition;[@];
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> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (10:0,10) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Tag block - Gen<None> - 6 - (13:0,13)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,17 @@
Markup block - Gen<None> - 16 - (0:0,0)
Tag block - Gen<None> - 5 - (0:0,0)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (5:0,5) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@bar] - SpanEditHandler;Accepts:Any - (6:0,6) - Symbols:2
HtmlSymbolType.Transition;[@];
HtmlSymbolType.Text;[bar];
Tag block - Gen<None> - 6 - (10:0,10)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:Any - (10:0,10) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];

View File

@ -0,0 +1,49 @@
Markup block - Gen<None> - 36 - (0:0,0)
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
HtmlSymbolType.Unknown;[];
Directive block - Gen<Directive:{section;RazorBlock;Unrestricted}> - 36 - (0:0,0)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
CSharpSymbolType.Transition;[@];
MetaCode span - Gen<None> - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
CSharpSymbolType.Identifier;[section];
Code span - Gen<None> - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
Code span - Gen<DirectiveToken {SectionName;Member;Opt:False}> - [Foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
CSharpSymbolType.Identifier;[Foo];
Markup span - Gen<None> - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
MetaCode span - Gen<None> - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[<null>];AtEnd - (13:0,13) - Symbols:1
CSharpSymbolType.LeftBrace;[{];
Markup block - Gen<None> - 21 - (14:0,14)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 5 - (15:0,15)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@] - SpanEditHandler;Accepts:Any - (21:0,21) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (22:0,22) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@] - SpanEditHandler;Accepts:Any - (23:0,23) - Symbols:1
HtmlSymbolType.Transition;[@];
Expression block - Gen<Expr> - 4 - (24:0,24)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (24:0,24) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K15 - (25:0,25) - Symbols:1
CSharpSymbolType.Identifier;[bar];
Tag block - Gen<None> - 6 - (28:0,28)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:Any - (28:0,28) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (34:0,34) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
MetaCode span - Gen<None> - [}] - SpanEditHandler;Accepts:None - (35:0,35) - Symbols:1
CSharpSymbolType.RightBrace;[}];
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (36:0,36) - Symbols:1
HtmlSymbolType.Unknown;[];

View File

@ -0,0 +1,41 @@
Markup block - Gen<None> - 33 - (0:0,0)
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
HtmlSymbolType.Unknown;[];
Directive block - Gen<Directive:{section;RazorBlock;Unrestricted}> - 33 - (0:0,0)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
CSharpSymbolType.Transition;[@];
MetaCode span - Gen<None> - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
CSharpSymbolType.Identifier;[section];
Code span - Gen<None> - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
Code span - Gen<DirectiveToken {SectionName;Member;Opt:False}> - [Foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
CSharpSymbolType.Identifier;[Foo];
Markup span - Gen<None> - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
MetaCode span - Gen<None> - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[<null>];AtEnd - (13:0,13) - Symbols:1
CSharpSymbolType.LeftBrace;[{];
Markup block - Gen<None> - 18 - (14:0,14)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 5 - (15:0,15)
Markup span - Gen<Markup> - [<foo>] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<None> - [@] - SpanEditHandler;Accepts:Any - (20:0,20) - Symbols:1
HtmlSymbolType.Transition;[@];
Markup span - Gen<Markup> - [@bar] - SpanEditHandler;Accepts:Any - (21:0,21) - Symbols:2
HtmlSymbolType.Transition;[@];
HtmlSymbolType.Text;[bar];
Tag block - Gen<None> - 6 - (25:0,25)
Markup span - Gen<Markup> - [</foo>] - SpanEditHandler;Accepts:Any - (25:0,25) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[foo];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (31:0,31) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
MetaCode span - Gen<None> - [}] - SpanEditHandler;Accepts:None - (32:0,32) - Symbols:1
CSharpSymbolType.RightBrace;[}];
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (33:0,33) - Symbols:1
HtmlSymbolType.Unknown;[];

View File

@ -0,0 +1,90 @@
Markup block - Gen<None> - 127 - (0:0,0)
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
HtmlSymbolType.Unknown;[];
Directive block - Gen<Directive:{section;RazorBlock;Unrestricted}> - 127 - (0:0,0)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
CSharpSymbolType.Transition;[@];
MetaCode span - Gen<None> - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
CSharpSymbolType.Identifier;[section];
Code span - Gen<None> - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
Code span - Gen<DirectiveToken {SectionName;Member;Opt:False}> - [foo] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1
CSharpSymbolType.Identifier;[foo];
Markup span - Gen<None> - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (12:0,12) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
MetaCode span - Gen<None> - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[<null>];AtEnd - (13:0,13) - Symbols:1
CSharpSymbolType.LeftBrace;[{];
Markup block - Gen<None> - 112 - (14:0,14)
Markup span - Gen<Markup> - [LF ] - SpanEditHandler;Accepts:Any - (14:0,14) - Symbols:2
HtmlSymbolType.NewLine;[LF];
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 4 - (20:1,4)
Markup span - Gen<Markup> - [<ul>] - SpanEditHandler;Accepts:Any - (20:1,4) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF] - SpanEditHandler;Accepts:Any - (24:1,8) - Symbols:1
HtmlSymbolType.NewLine;[LF];
Statement block - Gen<None> - 89 - (26:2,0)
Code span - Gen<Stmt> - [ ] - SpanEditHandler;Accepts:Any - (26:2,0) - Symbols:1
CSharpSymbolType.WhiteSpace;[ ];
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (34:2,8) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Stmt> - [foreach(var p in Products) {LF] - SpanEditHandler;Accepts:Any - (35:2,9) - Symbols:13
CSharpSymbolType.Keyword;[foreach];
CSharpSymbolType.LeftParenthesis;[(];
CSharpSymbolType.Identifier;[var];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Keyword;[in];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.Identifier;[Products];
CSharpSymbolType.RightParenthesis;[)];
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.LeftBrace;[{];
CSharpSymbolType.NewLine;[LF];
Markup block - Gen<None> - 39 - (65:3,0)
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (65:3,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 4 - (77:3,12)
Markup span - Gen<Markup> - [<li>] - SpanEditHandler;Accepts:None - (77:3,12) - Symbols:3
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [Product: ] - SpanEditHandler;Accepts:Any - (81:3,16) - Symbols:2
HtmlSymbolType.Text;[Product:];
HtmlSymbolType.WhiteSpace;[ ];
Expression block - Gen<Expr> - 7 - (90:3,25)
Transition span - Gen<None> - [@] - SpanEditHandler;Accepts:None - (90:3,25) - Symbols:1
CSharpSymbolType.Transition;[@];
Code span - Gen<Expr> - [p.Name] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K15 - (91:3,26) - Symbols:3
CSharpSymbolType.Identifier;[p];
CSharpSymbolType.Dot;[.];
CSharpSymbolType.Identifier;[Name];
Tag block - Gen<None> - 5 - (97:3,32)
Markup span - Gen<Markup> - [</li>] - SpanEditHandler;Accepts:None - (97:3,32) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[li];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF] - SpanEditHandler;Accepts:None - (102:3,37) - Symbols:1
HtmlSymbolType.NewLine;[LF];
Code span - Gen<Stmt> - [ }LF] - SpanEditHandler;Accepts:None - (104:4,0) - Symbols:3
CSharpSymbolType.WhiteSpace;[ ];
CSharpSymbolType.RightBrace;[}];
CSharpSymbolType.NewLine;[LF];
Markup span - Gen<Markup> - [ ] - SpanEditHandler;Accepts:Any - (115:5,0) - Symbols:1
HtmlSymbolType.WhiteSpace;[ ];
Tag block - Gen<None> - 5 - (119:5,4)
Markup span - Gen<Markup> - [</ul>] - SpanEditHandler;Accepts:Any - (119:5,4) - Symbols:4
HtmlSymbolType.OpenAngle;[<];
HtmlSymbolType.ForwardSlash;[/];
HtmlSymbolType.Text;[ul];
HtmlSymbolType.CloseAngle;[>];
Markup span - Gen<Markup> - [LF] - SpanEditHandler;Accepts:Any - (124:5,9) - Symbols:1
HtmlSymbolType.NewLine;[LF];
MetaCode span - Gen<None> - [}] - SpanEditHandler;Accepts:None - (126:6,0) - Symbols:1
CSharpSymbolType.RightBrace;[}];
Markup span - Gen<Markup> - [] - SpanEditHandler;Accepts:Any - (127:6,1) - Symbols:1
HtmlSymbolType.Unknown;[];