parent
80ebb4a068
commit
d0bf6bf841
|
|
@ -252,7 +252,30 @@ namespace Microsoft.AspNetCore.Razor.Parser
|
||||||
if (CurrentSymbol.Type == HtmlSymbolType.DoubleHyphen)
|
if (CurrentSymbol.Type == HtmlSymbolType.DoubleHyphen)
|
||||||
{
|
{
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
return AcceptUntilAll(HtmlSymbolType.DoubleHyphen, HtmlSymbolType.CloseAngle);
|
|
||||||
|
Span.EditHandler.AcceptedCharacters = AcceptedCharacters.Any;
|
||||||
|
while (!EndOfFile)
|
||||||
|
{
|
||||||
|
SkipToAndParseCode(HtmlSymbolType.DoubleHyphen);
|
||||||
|
if (At(HtmlSymbolType.DoubleHyphen))
|
||||||
|
{
|
||||||
|
AcceptWhile(HtmlSymbolType.DoubleHyphen);
|
||||||
|
|
||||||
|
if (At(HtmlSymbolType.Text) &&
|
||||||
|
string.Equals(CurrentSymbol.Content, "-", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
AcceptAndMoveNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (At(HtmlSymbolType.CloseAngle))
|
||||||
|
{
|
||||||
|
AcceptAndMoveNext();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else if (CurrentSymbol.Type == HtmlSymbolType.LeftBracket)
|
else if (CurrentSymbol.Type == HtmlSymbolType.LeftBracket)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Razor.Parser;
|
||||||
using Microsoft.AspNetCore.Razor.Parser.SyntaxTree;
|
using Microsoft.AspNetCore.Razor.Parser.SyntaxTree;
|
||||||
using Microsoft.AspNetCore.Razor.Test.Framework;
|
using Microsoft.AspNetCore.Razor.Test.Framework;
|
||||||
using Microsoft.AspNetCore.Razor.Text;
|
using Microsoft.AspNetCore.Razor.Text;
|
||||||
|
using Microsoft.AspNetCore.Razor.Tokenizer;
|
||||||
using Microsoft.AspNetCore.Razor.Tokenizer.Symbols;
|
using Microsoft.AspNetCore.Razor.Tokenizer.Symbols;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -356,6 +357,66 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.Html
|
||||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TheoryData HtmlCommentSupportsMultipleDashesData
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var factory = new SpanFactory
|
||||||
|
{
|
||||||
|
MarkupTokenizerFactory = doc => new HtmlTokenizer(doc),
|
||||||
|
CodeTokenizerFactory = doc => new CSharpTokenizer(doc)
|
||||||
|
};
|
||||||
|
|
||||||
|
return new TheoryData<string, MarkupBlock>
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"<div><!--- Hello World ---></div>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("<div>").Accepts(AcceptedCharacters.None)),
|
||||||
|
factory.Markup("<!--- Hello World --->").Accepts(AcceptedCharacters.None),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("</div>").Accepts(AcceptedCharacters.None)))
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<div><!---- Hello World ----></div>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("<div>").Accepts(AcceptedCharacters.None)),
|
||||||
|
factory.Markup("<!---- Hello World ---->").Accepts(AcceptedCharacters.None),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("</div>").Accepts(AcceptedCharacters.None)))
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<div><!----- Hello World -----></div>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("<div>").Accepts(AcceptedCharacters.None)),
|
||||||
|
factory.Markup("<!----- Hello World ----->").Accepts(AcceptedCharacters.None),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("</div>").Accepts(AcceptedCharacters.None)))
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<div><!----- Hello < --- > World </div> -----></div>",
|
||||||
|
new MarkupBlock(
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("<div>").Accepts(AcceptedCharacters.None)),
|
||||||
|
factory.Markup("<!----- Hello < --- > World </div> ----->").Accepts(AcceptedCharacters.None),
|
||||||
|
new MarkupTagBlock(
|
||||||
|
factory.Markup("</div>").Accepts(AcceptedCharacters.None)))
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[MemberData(nameof(HtmlCommentSupportsMultipleDashesData))]
|
||||||
|
public void HtmlCommentSupportsMultipleDashes(string documentContent, MarkupBlock expectedOutput)
|
||||||
|
{
|
||||||
|
ParseBlockTest(documentContent, expectedOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ParseBlockProperlyBalancesCommentStartAndEndTags()
|
public void ParseBlockProperlyBalancesCommentStartAndEndTags()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue