Modified MarkupTokenizer

So escaped markup in markup is valid.
This commit is contained in:
Nils Andresen 2022-08-02 23:28:39 +02:00 committed by Patrik Svensson
parent 638149f44b
commit a6618f762c
2 changed files with 31 additions and 5 deletions

View File

@ -66,13 +66,39 @@ internal sealed class MarkupTokenizer : IDisposable
var builder = new StringBuilder();
while (!_reader.Eof)
{
current = _reader.Peek();
if (current == ']')
current = _reader.Read();
var next = '\0';
if (!_reader.Eof)
{
break;
next = _reader.Peek();
}
builder.Append(_reader.Read());
if (current == ']')
{
if (next != ']')
{
break;
}
_reader.Read();
}
builder.Append(current);
if (current != '[')
{
continue;
}
if (next == '[')
{
_reader.Read();
}
else
{
throw new InvalidOperationException(
$"Encountered malformed markup tag at position {_reader.Position - 1}.");
}
}
if (_reader.Eof)
@ -80,7 +106,6 @@ internal sealed class MarkupTokenizer : IDisposable
throw new InvalidOperationException($"Encountered malformed markup tag at position {_reader.Position}.");
}
_reader.Read();
Current = new MarkupToken(MarkupTokenKind.Open, builder.ToString(), position);
return true;
}

View File

@ -100,6 +100,7 @@ public partial class AnsiConsoleTests
[InlineData("[yellow]Hello[/", "Encountered malformed markup tag at position 15.")]
[InlineData("[yellow]Hello[/foo", "Encountered malformed markup tag at position 15.")]
[InlineData("[yellow Hello", "Encountered malformed markup tag at position 13.")]
[InlineData("[yellow[green]]Hello", "Encountered malformed markup tag at position 7.")]
public void Should_Throw_If_Encounters_Malformed_Tag(string markup, string expected)
{
// Given