mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-11-01 01:25:27 +08:00 
			
		
		
		
	Emit native line breaks
This commit is contained in:
		| @@ -48,26 +48,14 @@ namespace Spectre.Console.Tests.Unit | ||||
|                     .ShouldBe("Hello World"); | ||||
|             } | ||||
|  | ||||
|             [Fact] | ||||
|             public void Should_Write_Line_Breaks() | ||||
|             [Theory] | ||||
|             [InlineData("Hello\n\nWorld\n\n")] | ||||
|             [InlineData("Hello\r\n\r\nWorld\r\n\r\n")] | ||||
|             public void Should_Write_Line_Breaks(string input) | ||||
|             { | ||||
|                 // Given | ||||
|                 var fixture = new PlainConsole(width: 5); | ||||
|                 var text = new Text("Hello\n\nWorld"); | ||||
|  | ||||
|                 // When | ||||
|                 fixture.Render(text); | ||||
|  | ||||
|                 // Then | ||||
|                 fixture.RawOutput.ShouldBe("Hello\n\nWorld"); | ||||
|             } | ||||
|  | ||||
|             [Fact] | ||||
|             public void Should_Write_Line_Breaks_At_End() | ||||
|             { | ||||
|                 // Given | ||||
|                 var fixture = new PlainConsole(width: 5); | ||||
|                 var text = new Text("Hello\n\nWorld\n\n"); | ||||
|                 var text = new Text(input); | ||||
|  | ||||
|                 // When | ||||
|                 fixture.Render(text); | ||||
|   | ||||
| @@ -39,7 +39,7 @@ namespace Spectre.Console.Composition | ||||
|         /// <summary> | ||||
|         /// Gets a segment representing a line break. | ||||
|         /// </summary> | ||||
|         public static Segment LineBreak { get; } = new Segment("\n", Style.Plain, true); | ||||
|         public static Segment LineBreak { get; } = new Segment(Environment.NewLine, Style.Plain, true); | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Gets an empty segment. | ||||
| @@ -95,7 +95,7 @@ namespace Spectre.Console.Composition | ||||
|         /// <returns>A new segment without any trailing line endings.</returns> | ||||
|         public Segment StripLineEndings() | ||||
|         { | ||||
|             return new Segment(Text.TrimEnd('\n'), Style); | ||||
|             return new Segment(Text.TrimEnd('\n').TrimEnd('\r'), Style); | ||||
|         } | ||||
|  | ||||
|         /// <summary> | ||||
|   | ||||
| @@ -80,7 +80,7 @@ namespace Spectre.Console | ||||
|                 new Segment(border.GetPart(BorderPart.HeaderTopLeft)), | ||||
|                 new Segment(border.GetPart(BorderPart.HeaderTop, panelWidth)), | ||||
|                 new Segment(border.GetPart(BorderPart.HeaderTopRight)), | ||||
|                 new Segment("\n"), | ||||
|                 Segment.LineBreak, | ||||
|             }; | ||||
|  | ||||
|             // Render the child. | ||||
| @@ -118,14 +118,14 @@ namespace Spectre.Console | ||||
|                 } | ||||
|  | ||||
|                 result.Add(new Segment(border.GetPart(BorderPart.CellRight))); | ||||
|                 result.Add(new Segment("\n")); | ||||
|                 result.Add(Segment.LineBreak); | ||||
|             } | ||||
|  | ||||
|             // Panel bottom | ||||
|             result.Add(new Segment(border.GetPart(BorderPart.FooterBottomLeft))); | ||||
|             result.Add(new Segment(border.GetPart(BorderPart.FooterBottom, panelWidth))); | ||||
|             result.Add(new Segment(border.GetPart(BorderPart.FooterBottomRight))); | ||||
|             result.Add(new Segment("\n")); | ||||
|             result.Add(Segment.LineBreak); | ||||
|  | ||||
|             return result; | ||||
|         } | ||||
|   | ||||
| @@ -92,7 +92,7 @@ namespace Spectre.Console | ||||
|             var justification = context.Justification ?? Alignment; | ||||
|             foreach (var (_, _, last, line) in lines.Enumerate()) | ||||
|             { | ||||
|                 var length = line.Sum(l => l.CellLength(context.Encoding)); | ||||
|                 var length = line.Sum(l => l.StripLineEndings().CellLength(context.Encoding)); | ||||
|                 if (length < maxWidth) | ||||
|                 { | ||||
|                     // Justify right side | ||||
|   | ||||
| @@ -70,6 +70,11 @@ namespace Spectre.Console.Internal | ||||
|  | ||||
|         public static int GetCellLength(Encoding encoding, char rune) | ||||
|         { | ||||
|             if (rune == '\r' || rune == '\n') | ||||
|             { | ||||
|                 return 0; | ||||
|             } | ||||
|  | ||||
|             // Is it represented by a single byte? | ||||
|             // In that case we don't have to calculate the | ||||
|             // actual cell width. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Patrik Svensson
					Patrik Svensson