mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-16 08:52:50 +08:00
modified tokenizer to not break on on ]]] at the end of a style
This commit is contained in:
parent
4258cbfb85
commit
f895bb175d
@ -122,10 +122,18 @@ internal sealed class MarkupTokenizer : IDisposable
|
|||||||
var encounteredClosing = false;
|
var encounteredClosing = false;
|
||||||
while (!_reader.Eof)
|
while (!_reader.Eof)
|
||||||
{
|
{
|
||||||
|
var currentStylePartCanContainMarkup =
|
||||||
|
builder.ToString()
|
||||||
|
.Split(' ')
|
||||||
|
.Last()
|
||||||
|
.StartsWith("link=", StringComparison.OrdinalIgnoreCase);
|
||||||
current = _reader.Peek();
|
current = _reader.Peek();
|
||||||
|
|
||||||
if (current == ']' && !encounteredOpening)
|
if (currentStylePartCanContainMarkup)
|
||||||
{
|
{
|
||||||
|
switch (current)
|
||||||
|
{
|
||||||
|
case ']' when !encounteredOpening:
|
||||||
if (encounteredClosing)
|
if (encounteredClosing)
|
||||||
{
|
{
|
||||||
builder.Append(_reader.Read());
|
builder.Append(_reader.Read());
|
||||||
@ -136,10 +144,8 @@ internal sealed class MarkupTokenizer : IDisposable
|
|||||||
_reader.Read();
|
_reader.Read();
|
||||||
encounteredClosing = true;
|
encounteredClosing = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
if (current == '[' && !encounteredClosing)
|
case '[' when !encounteredClosing:
|
||||||
{
|
|
||||||
if (encounteredOpening)
|
if (encounteredOpening)
|
||||||
{
|
{
|
||||||
builder.Append(_reader.Read());
|
builder.Append(_reader.Read());
|
||||||
@ -151,6 +157,21 @@ internal sealed class MarkupTokenizer : IDisposable
|
|||||||
encounteredOpening = true;
|
encounteredOpening = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (current)
|
||||||
|
{
|
||||||
|
case ']':
|
||||||
|
_reader.Read();
|
||||||
|
encounteredClosing = true;
|
||||||
|
break;
|
||||||
|
case '[':
|
||||||
|
_reader.Read();
|
||||||
|
encounteredOpening = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (encounteredClosing)
|
if (encounteredClosing)
|
||||||
{
|
{
|
||||||
|
@ -154,5 +154,25 @@ public partial class AnsiConsoleTests
|
|||||||
// Then
|
// Then
|
||||||
console.Output.ShouldBe("[grey][white]");
|
console.Output.ShouldBe("[grey][white]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("[white][[[/][white]]][/]", "[]")]
|
||||||
|
[InlineData("[white][[[/]", "[")]
|
||||||
|
[InlineData("[white]]][/]", "]")]
|
||||||
|
[InlineData("[black on white link=https://www.gooole.com/q=]]]Search for a bracket[/]", "Search for a bracket")]
|
||||||
|
[InlineData("[link=https://www.gooole.com/q=]] black on white]Search for a bracket[/]", "Search for a bracket")]
|
||||||
|
[InlineData("[link]https://www.gooole.com/q=]][/]", "https://www.gooole.com/q=]")]
|
||||||
|
public void Should_Not_Fail_As_In_GH1024(string markup, string expected)
|
||||||
|
{
|
||||||
|
// Given
|
||||||
|
var console = new TestConsole();
|
||||||
|
console.EmitAnsiSequences = false;
|
||||||
|
|
||||||
|
// When
|
||||||
|
console.Markup(markup);
|
||||||
|
|
||||||
|
// Then
|
||||||
|
console.Output.ShouldBe(expected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user