[Fixes #428] Removed newlines at the end of razor comments
This commit is contained in:
parent
b6765d370c
commit
71c4c8dac6
|
|
@ -134,12 +134,35 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
if (last != null)
|
if (last != null)
|
||||||
{
|
{
|
||||||
|
// Don't render the whitespace between the start of the line and the razor comment.
|
||||||
|
if (startOfLine && last.Type == HtmlSymbolType.WhiteSpace)
|
||||||
|
{
|
||||||
|
AddMarkerSymbolIfNecessary();
|
||||||
|
// Output the symbols that may have been accepted prior to the whitespace.
|
||||||
|
Output(SpanKind.Markup);
|
||||||
|
|
||||||
|
Span.ChunkGenerator = SpanChunkGenerator.Null;
|
||||||
|
}
|
||||||
|
|
||||||
Accept(last);
|
Accept(last);
|
||||||
last = null;
|
last = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddMarkerSymbolIfNecessary();
|
AddMarkerSymbolIfNecessary();
|
||||||
Output(SpanKind.Markup);
|
Output(SpanKind.Markup);
|
||||||
|
|
||||||
RazorComment();
|
RazorComment();
|
||||||
|
|
||||||
|
// Handle the whitespace and newline at the end of a razor comment.
|
||||||
|
if (startOfLine &&
|
||||||
|
(At(HtmlSymbolType.NewLine) ||
|
||||||
|
(At(HtmlSymbolType.WhiteSpace) && NextIs(HtmlSymbolType.NewLine))))
|
||||||
|
{
|
||||||
|
AcceptWhile(IsSpacingToken(includeNewLines: false));
|
||||||
|
AcceptAndMoveNext();
|
||||||
|
Span.ChunkGenerator = SpanChunkGenerator.Null;
|
||||||
|
Output(SpanKind.Markup);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using Microsoft.AspNet.Razor.Chunks.Generators;
|
||||||
using Microsoft.AspNet.Razor.Parser;
|
using Microsoft.AspNet.Razor.Parser;
|
||||||
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
|
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
|
||||||
using Microsoft.AspNet.Razor.Test.Framework;
|
using Microsoft.AspNet.Razor.Test.Framework;
|
||||||
|
|
@ -128,7 +129,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
new MarkupTagBlock(
|
new MarkupTagBlock(
|
||||||
Factory.MarkupTransition("<text").Accepts(AcceptedCharacters.Any)),
|
Factory.MarkupTransition("<text").Accepts(AcceptedCharacters.Any)),
|
||||||
Factory.Markup(Environment.NewLine + " ").Accepts(AcceptedCharacters.None),
|
Factory.Markup(Environment.NewLine).Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Markup(" ").With(SpanChunkGenerator.Null),
|
||||||
new CommentBlock(
|
new CommentBlock(
|
||||||
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
.Accepts(AcceptedCharacters.None),
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
|
@ -143,7 +145,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
||||||
.Accepts(AcceptedCharacters.None),
|
.Accepts(AcceptedCharacters.None),
|
||||||
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
.Accepts(AcceptedCharacters.None)),
|
.Accepts(AcceptedCharacters.None)),
|
||||||
Factory.Markup(Environment.NewLine + "}")))),
|
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
|
||||||
|
Factory.Markup("}")))),
|
||||||
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, 6 + Environment.NewLine.Length, 1, 4),
|
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, 6 + Environment.NewLine.Length, 1, 4),
|
||||||
new RazorError(RazorResources.FormatParseError_MissingEndTag("text"), 6 + Environment.NewLine.Length, 1, 4),
|
new RazorError(RazorResources.FormatParseError_MissingEndTag("text"), 6 + Environment.NewLine.Length, 1, 4),
|
||||||
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
|
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
|
||||||
|
|
@ -173,5 +176,227 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
||||||
new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 2, 0, 2),
|
new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 2, 0, 2),
|
||||||
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
|
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RazorCommentInMarkup()
|
||||||
|
{
|
||||||
|
ParseDocumentTest(
|
||||||
|
"<p>" + Environment.NewLine
|
||||||
|
+ "@**@" + Environment.NewLine
|
||||||
|
+ "</p>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("<p>")),
|
||||||
|
Factory.Markup(Environment.NewLine),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
string.Empty,
|
||||||
|
HtmlSymbolType.Unknown))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("</p>"))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void MultipleRazorCommentInMarkup()
|
||||||
|
{
|
||||||
|
ParseDocumentTest(
|
||||||
|
"<p>" + Environment.NewLine
|
||||||
|
+ " @**@ " + Environment.NewLine
|
||||||
|
+ "@**@" + Environment.NewLine
|
||||||
|
+ "</p>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("<p>")),
|
||||||
|
Factory.Markup(Environment.NewLine),
|
||||||
|
Factory.Markup(" ").With(SpanChunkGenerator.Null),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
string.Empty,
|
||||||
|
HtmlSymbolType.Unknown))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(" " + Environment.NewLine).With(SpanChunkGenerator.Null),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
string.Empty,
|
||||||
|
HtmlSymbolType.Unknown))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("</p>"))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void MultipleRazorCommentsInSameLineInMarkup()
|
||||||
|
{
|
||||||
|
ParseDocumentTest(
|
||||||
|
"<p>" + Environment.NewLine
|
||||||
|
+ "@**@ @**@" + Environment.NewLine
|
||||||
|
+ "</p>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("<p>")),
|
||||||
|
Factory.Markup(Environment.NewLine),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
string.Empty,
|
||||||
|
HtmlSymbolType.Unknown))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.EmptyHtml(),
|
||||||
|
Factory.Markup(" ").With(SpanChunkGenerator.Null),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
string.Empty,
|
||||||
|
HtmlSymbolType.Unknown))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("</p>"))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RazorCommentsSurroundingMarkup()
|
||||||
|
{
|
||||||
|
ParseDocumentTest(
|
||||||
|
"<p>" + Environment.NewLine
|
||||||
|
+ "@* hello *@ content @* world *@" + Environment.NewLine
|
||||||
|
+ "</p>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("<p>")),
|
||||||
|
Factory.Markup(Environment.NewLine),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
" hello ",
|
||||||
|
HtmlSymbolType.RazorComment))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(" content "),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
" world ",
|
||||||
|
HtmlSymbolType.RazorComment))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(Environment.NewLine),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("</p>"))
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void RazorCommentWithExtraNewLineInMarkup()
|
||||||
|
{
|
||||||
|
ParseDocumentTest(
|
||||||
|
"<p>" + Environment.NewLine + Environment.NewLine
|
||||||
|
+ "@* content *@" + Environment.NewLine
|
||||||
|
+ "@*" + Environment.NewLine
|
||||||
|
+ "content" + Environment.NewLine
|
||||||
|
+ "*@" + Environment.NewLine + Environment.NewLine
|
||||||
|
+ "</p>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("<p>")),
|
||||||
|
Factory.Markup(Environment.NewLine + Environment.NewLine),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
" content ",
|
||||||
|
HtmlSymbolType.RazorComment))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
|
||||||
|
new CommentBlock(
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.Span(SpanKind.Comment, new HtmlSymbol(
|
||||||
|
Factory.LocationTracker.CurrentLocation,
|
||||||
|
Environment.NewLine + "content" + Environment.NewLine,
|
||||||
|
HtmlSymbolType.RazorComment))
|
||||||
|
.Accepts(AcceptedCharacters.Any),
|
||||||
|
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
|
||||||
|
.Accepts(AcceptedCharacters.None),
|
||||||
|
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||||
|
.Accepts(AcceptedCharacters.None)),
|
||||||
|
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
|
||||||
|
Factory.Markup(Environment.NewLine),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
Factory.Markup("</p>"))
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -156,9 +156,8 @@ WriteTo(__razor_template_writer, item);
|
||||||
#line default
|
#line default
|
||||||
#line hidden
|
#line hidden
|
||||||
|
|
||||||
Instrumentation.BeginContext(574, 93, true);
|
Instrumentation.BeginContext(574, 79, true);
|
||||||
WriteLiteralTo(__razor_template_writer, "\r\n <ul>\r\n <li>Child Items... ?</li>\r\n \r\n </ul" +
|
WriteLiteralTo(__razor_template_writer, "\r\n <ul>\r\n <li>Child Items... ?</li>\r\n </ul>\r\n </li>");
|
||||||
">\r\n </li>");
|
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue