mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-10-31 17:15:28 +08:00 
			
		
		
		
	Modified MarkupTokenizer
So escaped markup in markup is valid.
This commit is contained in:
		 Nils Andresen
					Nils Andresen
				
			
				
					committed by
					
						 Patrik Svensson
						Patrik Svensson
					
				
			
			
				
	
			
			
			 Patrik Svensson
						Patrik Svensson
					
				
			
						parent
						
							638149f44b
						
					
				
				
					commit
					a6618f762c
				
			| @@ -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; | ||||
|         } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user