[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)
|
||||
{
|
||||
// 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);
|
||||
last = null;
|
||||
}
|
||||
|
||||
AddMarkerSymbolIfNecessary();
|
||||
Output(SpanKind.Markup);
|
||||
|
||||
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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.AspNet.Razor.Chunks.Generators;
|
||||
using Microsoft.AspNet.Razor.Parser;
|
||||
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
|
||||
using Microsoft.AspNet.Razor.Test.Framework;
|
||||
|
|
@ -128,7 +129,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
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(
|
||||
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
|
|
@ -143,7 +145,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
.Accepts(AcceptedCharacters.None),
|
||||
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||
.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.FormatParseError_MissingEndTag("text"), 6 + Environment.NewLine.Length, 1, 4),
|
||||
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.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 hidden
|
||||
|
||||
Instrumentation.BeginContext(574, 93, true);
|
||||
WriteLiteralTo(__razor_template_writer, "\r\n <ul>\r\n <li>Child Items... ?</li>\r\n \r\n </ul" +
|
||||
">\r\n </li>");
|
||||
Instrumentation.BeginContext(574, 79, true);
|
||||
WriteLiteralTo(__razor_template_writer, "\r\n <ul>\r\n <li>Child Items... ?</li>\r\n </ul>\r\n </li>");
|
||||
Instrumentation.EndContext();
|
||||
}
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue